DBus-1-TQt  1.0
tqdbuserror.cpp
Go to the documentation of this file.
00001 /* qdbuserror.cpp TQT_DBusError object
00002  *
00003  * Copyright (C) 2005 Harald Fernengel <harry@kdevelop.org>
00004  * Copyright (C) 2005-2007 Kevin Krammer <kevin.krammer@gmx.at>
00005  *
00006  * Licensed under the Academic Free License version 2.1
00007  *
00008  * This program is free software; you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation; either version 2 of the License, or
00011  * (at your option) any later version.
00012  *
00013  * This program is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  * along with this program; if not, write to the Free Software
00020  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
00021  * USA.
00022  *
00023  */
00024 
00025 #include "tqdbuserror.h"
00026 
00027 #include <dbus/dbus.h>
00028 
00029 #include <tqmap.h>
00030 
00031 typedef TQMap<TQString, TQT_DBusError::ErrorType> ErrorNameMap;
00032 static ErrorNameMap errorTypesByName;
00033 
00034 static TQString qDBusErrorNameForType(TQT_DBusError::ErrorType type)
00035 {
00036     switch (type)
00037     {
00038         case TQT_DBusError::InvalidError:
00039             Q_ASSERT(false);
00040             return TQString();
00041 
00042         case TQT_DBusError::Failed:
00043             return TQString::fromUtf8(DBUS_ERROR_FAILED);
00044         case TQT_DBusError:: NoMemory:
00045             return TQString::fromUtf8(DBUS_ERROR_NO_MEMORY);
00046         case TQT_DBusError:: ServiceUnknown:
00047             return TQString::fromUtf8(DBUS_ERROR_SERVICE_UNKNOWN);
00048         case TQT_DBusError:: NameHasNoOwner:
00049             return TQString::fromUtf8(DBUS_ERROR_NAME_HAS_NO_OWNER);
00050         case TQT_DBusError:: NoReply:
00051             return TQString::fromUtf8(DBUS_ERROR_NO_REPLY);
00052         case TQT_DBusError:: IOError:
00053             return TQString::fromUtf8(DBUS_ERROR_IO_ERROR);
00054         case TQT_DBusError:: BadAddress:
00055             return TQString::fromUtf8(DBUS_ERROR_BAD_ADDRESS);
00056         case TQT_DBusError:: NotSupported:
00057             return TQString::fromUtf8(DBUS_ERROR_NOT_SUPPORTED);
00058         case TQT_DBusError:: LimitsExceeded:
00059             return TQString::fromUtf8(DBUS_ERROR_LIMITS_EXCEEDED);
00060         case TQT_DBusError:: AccessDenied:
00061             return TQString::fromUtf8(DBUS_ERROR_ACCESS_DENIED);
00062         case TQT_DBusError:: AuthFailed:
00063             return TQString::fromUtf8(DBUS_ERROR_AUTH_FAILED);
00064         case TQT_DBusError:: NoServer:
00065             return TQString::fromUtf8(DBUS_ERROR_NO_SERVER);
00066         case TQT_DBusError:: Timeout:
00067             return TQString::fromUtf8(DBUS_ERROR_TIMEOUT);
00068         case TQT_DBusError:: NoNetwork:
00069             return TQString::fromUtf8(DBUS_ERROR_NO_NETWORK);
00070         case TQT_DBusError:: Disconnected:
00071             return TQString::fromUtf8(DBUS_ERROR_DISCONNECTED);
00072         case TQT_DBusError:: InvalidArgs:
00073             return TQString::fromUtf8(DBUS_ERROR_INVALID_ARGS);
00074         case TQT_DBusError:: FileNotFound:
00075             return TQString::fromUtf8(DBUS_ERROR_FILE_NOT_FOUND);
00076         case TQT_DBusError:: FileExists:
00077             return TQString::fromUtf8(DBUS_ERROR_FILE_EXISTS);
00078         case TQT_DBusError:: UnknownMethod:
00079             return TQString::fromUtf8(DBUS_ERROR_UNKNOWN_METHOD);
00080         case TQT_DBusError:: TimedOut:
00081             return TQString::fromUtf8(DBUS_ERROR_TIMED_OUT);
00082         case TQT_DBusError:: InvalidSignature:
00083             return TQString::fromUtf8(DBUS_ERROR_INVALID_SIGNATURE);
00084 
00085         case TQT_DBusError::UserDefined:
00086             Q_ASSERT(false);
00087             return TQString();
00088     }
00089 
00090     Q_ASSERT(false);
00091     return TQString();
00092 }
00093 
00094 static void qDBusErrorSetupNameMapping()
00095 {
00096     for (int i = TQT_DBusError::InvalidError + 1; i < TQT_DBusError::UserDefined; ++i)
00097     {
00098         TQT_DBusError::ErrorType type = static_cast<TQT_DBusError::ErrorType>(i);
00099         errorTypesByName[qDBusErrorNameForType(type)] = type;
00100     }
00101 }
00102 
00103 static TQT_DBusError::ErrorType qDBusErrorTypeForName(const TQString& name)
00104 {
00105     if (name.isEmpty()) return TQT_DBusError::InvalidError;
00106 
00107     if (errorTypesByName.isEmpty())
00108         qDBusErrorSetupNameMapping();
00109 
00110     ErrorNameMap::const_iterator it = errorTypesByName.find(name);
00111     if (it != errorTypesByName.end()) return it.data();
00112 
00113     return TQT_DBusError::UserDefined;
00114 }
00115 
00116 TQT_DBusError::TQT_DBusError() : errorType(InvalidError), m_dbusErrorSet(false)
00117 {
00118 }
00119 
00120 TQT_DBusError::TQT_DBusError(const DBusError *error) : errorType(InvalidError), m_dbusErrorSet(false)
00121 {
00122     if (!error || !dbus_error_is_set(error))
00123         return;
00124 
00125     nm = TQString::fromUtf8(error->name);
00126     msg = TQString::fromUtf8(error->message);
00127 
00128     errorType = qDBusErrorTypeForName(nm);
00129 }
00130 
00131 TQT_DBusError::TQT_DBusError(const TQString& error, const TQString& message)
00132     : errorType(UserDefined), m_dbusErrorSet(false), nm(error), msg(message)
00133 {
00134     errorType = qDBusErrorTypeForName(nm);
00135 }
00136 
00137 bool TQT_DBusError::isValid() const
00138 {
00139     return errorType != InvalidError && !nm.isEmpty() && !msg.isEmpty();
00140 }
00141 
00142 TQT_DBusError::TQT_DBusError(ErrorType type, const TQString& message)
00143     : errorType(type), m_dbusErrorSet(false), msg(message)
00144 {
00145     nm = qDBusErrorNameForType(type);
00146 }
00147 
00148 TQT_DBusError TQT_DBusError::stdFailed(const TQString& message)
00149 {
00150     return TQT_DBusError(TQT_DBusError::Failed, message);
00151 }
00152 
00153 TQT_DBusError TQT_DBusError::stdNoMemory(const TQString& message)
00154 {
00155     return TQT_DBusError(TQT_DBusError::NoMemory, message);
00156 }
00157 
00158 TQT_DBusError TQT_DBusError::stdNoReply(const TQString& message)
00159 {
00160     return TQT_DBusError(TQT_DBusError::NoReply, message);
00161 }
00162 
00163 TQT_DBusError TQT_DBusError::stdIOError(const TQString& message)
00164 {
00165     return TQT_DBusError(TQT_DBusError::IOError, message);
00166 }
00167 
00168 TQT_DBusError TQT_DBusError::stdNotSupported(const TQString& message)
00169 {
00170     return TQT_DBusError(TQT_DBusError::NotSupported, message);
00171 }
00172 
00173 TQT_DBusError TQT_DBusError::stdLimitsExceeded(const TQString& message)
00174 {
00175     return TQT_DBusError(TQT_DBusError::LimitsExceeded, message);
00176 }
00177 
00178 TQT_DBusError TQT_DBusError::stdAccessDenied(const TQString& message)
00179 {
00180     return TQT_DBusError(TQT_DBusError::AccessDenied, message);
00181 }
00182 
00183 TQT_DBusError TQT_DBusError::stdAuthFailed(const TQString& message)
00184 {
00185     return TQT_DBusError(TQT_DBusError::AuthFailed, message);
00186 }
00187 
00188 TQT_DBusError TQT_DBusError::stdTimeout(const TQString& message)
00189 {
00190     return TQT_DBusError(TQT_DBusError::Timeout, message);
00191 }
00192 
00193 TQT_DBusError TQT_DBusError::stdInvalidArgs(const TQString& message)
00194 {
00195     return TQT_DBusError(TQT_DBusError::InvalidArgs, message);
00196 }
00197 
00198 TQT_DBusError TQT_DBusError::stdFileNotFound(const TQString& message)
00199 {
00200     return TQT_DBusError(TQT_DBusError::FileNotFound, message);
00201 }
00202 
00203 TQT_DBusError TQT_DBusError::stdFileExists(const TQString& message)
00204 {
00205     return TQT_DBusError(TQT_DBusError::FileExists, message);
00206 }
00207 
00208 TQT_DBusError TQT_DBusError::stdUnknownMethod(const TQString& message)
00209 {
00210     return TQT_DBusError(TQT_DBusError::UnknownMethod, message);
00211 }
00212 
00213 TQT_DBusError TQT_DBusError::stdInvalidSignature(const TQString& message)
00214 {
00215     return TQT_DBusError(TQT_DBusError::InvalidSignature, message);
00216 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines