# HG changeset patch # User Sebastien Jodogne # Date 1443012140 -7200 # Node ID 87c77b9b3679d13526f02e9cedabe93ff593a1e3 # Parent 0669d05b6de12797cec12d434d1bf1043eb606bf provision for error codes in plugins diff -r 0669d05b6de1 -r 87c77b9b3679 Core/Enumerations.cpp --- a/Core/Enumerations.cpp Wed Sep 23 13:39:00 2015 +0200 +++ b/Core/Enumerations.cpp Wed Sep 23 14:42:20 2015 +0200 @@ -142,6 +142,12 @@ case ErrorCode_BadFont: return "Badly formatted font file"; + case ErrorCode_DatabasePlugin: + return "The plugin implementing a custom database back-end does not fulfill the proper interface"; + + case ErrorCode_StorageAreaPlugin: + return "Error in the plugin implementing a custom storage area"; + case ErrorCode_SQLiteNotOpened: return "SQLite: The database is not opened"; @@ -304,8 +310,8 @@ case ErrorCode_DatabaseBackendAlreadyRegistered: return "Another plugin has already registered a custom database back-end"; - case ErrorCode_DatabasePlugin: - return "The plugin implementing a custom database back-end does not fulfill the proper interface"; + case ErrorCode_DatabaseNotInitialized: + return "Plugin trying to call the database during its initialization"; default: return "Unknown error code"; diff -r 0669d05b6de1 -r 87c77b9b3679 Core/Enumerations.h --- a/Core/Enumerations.h Wed Sep 23 13:39:00 2015 +0200 +++ b/Core/Enumerations.h Wed Sep 23 14:42:20 2015 +0200 @@ -77,6 +77,8 @@ ErrorCode_BadJson = 28 /*!< Cannot parse a JSON document */, ErrorCode_Unauthorized = 29 /*!< Bad credentials were provided to an HTTP request */, ErrorCode_BadFont = 30 /*!< Badly formatted font file */, + ErrorCode_DatabasePlugin = 31 /*!< The plugin implementing a custom database back-end does not fulfill the proper interface */, + ErrorCode_StorageAreaPlugin = 32 /*!< Error in the plugin implementing a custom storage area */, ErrorCode_SQLiteNotOpened = 1000 /*!< SQLite: The database is not opened */, ErrorCode_SQLiteAlreadyOpened = 1001 /*!< SQLite: Connection is already open */, ErrorCode_SQLiteCannotOpen = 1002 /*!< SQLite: Unable to open the database */, @@ -131,7 +133,7 @@ ErrorCode_LuaReturnsNoString = 2035 /*!< The Lua function does not return a string */, ErrorCode_StorageAreaAlreadyRegistered = 2036 /*!< Another plugin has already registered a custom storage area */, ErrorCode_DatabaseBackendAlreadyRegistered = 2037 /*!< Another plugin has already registered a custom database back-end */, - ErrorCode_DatabasePlugin = 2038 /*!< The plugin implementing a custom database back-end does not fulfill the proper interface */ + ErrorCode_DatabaseNotInitialized = 2038 /*!< Plugin trying to call the database during its initialization */ }; enum LogLevel diff -r 0669d05b6de1 -r 87c77b9b3679 Core/OrthancException.h --- a/Core/OrthancException.h Wed Sep 23 13:39:00 2015 +0200 +++ b/Core/OrthancException.h Wed Sep 23 14:42:20 2015 +0200 @@ -32,6 +32,7 @@ #pragma once +#include #include #include "Enumerations.h" @@ -40,23 +41,41 @@ class OrthancException { protected: - ErrorCode errorCode_; + ErrorCode errorCode_; HttpStatus httpStatus_; + int32_t pluginCode_; + + OrthancException(ErrorCode errorCode, + HttpStatus httpStatus, + int32_t pluginCode) : + errorCode_(errorCode), + httpStatus_(httpStatus), + pluginCode_(0) + { + } public: OrthancException(ErrorCode errorCode) : errorCode_(errorCode), - httpStatus_(ConvertErrorCodeToHttpStatus(errorCode)) + httpStatus_(ConvertErrorCodeToHttpStatus(errorCode)), + pluginCode_(0) { } OrthancException(ErrorCode errorCode, HttpStatus httpStatus) : errorCode_(errorCode), - httpStatus_(httpStatus) + httpStatus_(httpStatus), + pluginCode_(0) { } + static OrthancException GetPluginException(int32_t pluginCode, + HttpStatus httpStatus) + { + return OrthancException(ErrorCode_Plugin, httpStatus, pluginCode); + } + ErrorCode GetErrorCode() const { return errorCode_; @@ -67,6 +86,11 @@ return httpStatus_; } + int32_t GetPluginErrorCode() const + { + return pluginCode_; + } + const char* What() const { return EnumerationToString(errorCode_); diff -r 0669d05b6de1 -r 87c77b9b3679 Plugins/Engine/OrthancPlugins.cpp --- a/Plugins/Engine/OrthancPlugins.cpp Wed Sep 23 13:39:00 2015 +0200 +++ b/Plugins/Engine/OrthancPlugins.cpp Wed Sep 23 14:42:20 2015 +0200 @@ -118,7 +118,7 @@ catch (...) { Free(buffer); - throw; + throw OrthancException(ErrorCode_NotEnoughMemory); } if (size > 0) @@ -743,8 +743,7 @@ { if (!pimpl_->context_) { - LOG(ERROR) << "Plugin trying to call the database during its initialization"; - throw OrthancException(ErrorCode_Plugin); + throw OrthancException(ErrorCode_DatabaseNotInitialized); } } diff -r 0669d05b6de1 -r 87c77b9b3679 Plugins/Engine/PluginsEnumerations.cpp --- a/Plugins/Engine/PluginsEnumerations.cpp Wed Sep 23 13:39:00 2015 +0200 +++ b/Plugins/Engine/PluginsEnumerations.cpp Wed Sep 23 14:42:20 2015 +0200 @@ -144,6 +144,12 @@ case OrthancPluginErrorCode_BadFont: return ErrorCode_BadFont; + case OrthancPluginErrorCode_DatabasePlugin: + return ErrorCode_DatabasePlugin; + + case OrthancPluginErrorCode_StorageAreaPlugin: + return ErrorCode_StorageAreaPlugin; + case OrthancPluginErrorCode_SQLiteNotOpened: return ErrorCode_SQLiteNotOpened; @@ -306,8 +312,8 @@ case OrthancPluginErrorCode_DatabaseBackendAlreadyRegistered: return ErrorCode_DatabaseBackendAlreadyRegistered; - case OrthancPluginErrorCode_DatabasePlugin: - return ErrorCode_DatabasePlugin; + case OrthancPluginErrorCode_DatabaseNotInitialized: + return ErrorCode_DatabaseNotInitialized; default: return ErrorCode_Plugin; diff -r 0669d05b6de1 -r 87c77b9b3679 Plugins/Include/orthanc/OrthancCPlugin.h --- a/Plugins/Include/orthanc/OrthancCPlugin.h Wed Sep 23 13:39:00 2015 +0200 +++ b/Plugins/Include/orthanc/OrthancCPlugin.h Wed Sep 23 14:42:20 2015 +0200 @@ -210,6 +210,8 @@ OrthancPluginErrorCode_BadJson = 28 /*!< Cannot parse a JSON document */, OrthancPluginErrorCode_Unauthorized = 29 /*!< Bad credentials were provided to an HTTP request */, OrthancPluginErrorCode_BadFont = 30 /*!< Badly formatted font file */, + OrthancPluginErrorCode_DatabasePlugin = 31 /*!< The plugin implementing a custom database back-end does not fulfill the proper interface */, + OrthancPluginErrorCode_StorageAreaPlugin = 32 /*!< Error in the plugin implementing a custom storage area */, OrthancPluginErrorCode_SQLiteNotOpened = 1000 /*!< SQLite: The database is not opened */, OrthancPluginErrorCode_SQLiteAlreadyOpened = 1001 /*!< SQLite: Connection is already open */, OrthancPluginErrorCode_SQLiteCannotOpen = 1002 /*!< SQLite: Unable to open the database */, @@ -264,7 +266,7 @@ OrthancPluginErrorCode_LuaReturnsNoString = 2035 /*!< The Lua function does not return a string */, OrthancPluginErrorCode_StorageAreaAlreadyRegistered = 2036 /*!< Another plugin has already registered a custom storage area */, OrthancPluginErrorCode_DatabaseBackendAlreadyRegistered = 2037 /*!< Another plugin has already registered a custom database back-end */, - OrthancPluginErrorCode_DatabasePlugin = 2038 /*!< The plugin implementing a custom database back-end does not fulfill the proper interface */, + OrthancPluginErrorCode_DatabaseNotInitialized = 2038 /*!< Plugin trying to call the database during its initialization */, _OrthancPluginErrorCode_INTERNAL = 0x7fffffff } OrthancPluginErrorCode; diff -r 0669d05b6de1 -r 87c77b9b3679 Plugins/Include/orthanc/OrthancCppDatabasePlugin.h --- a/Plugins/Include/orthanc/OrthancCppDatabasePlugin.h Wed Sep 23 13:39:00 2015 +0200 +++ b/Plugins/Include/orthanc/OrthancCppDatabasePlugin.h Wed Sep 23 14:42:20 2015 +0200 @@ -71,7 +71,7 @@ OrthancPluginErrorCode code_; public: - DatabaseException() : code_(OrthancPluginErrorCode_Plugin) + DatabaseException() : code_(OrthancPluginErrorCode_DatabasePlugin) { } @@ -501,7 +501,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -525,7 +525,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -547,7 +547,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -569,7 +569,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -594,7 +594,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -618,7 +618,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -642,7 +642,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -665,7 +665,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -699,7 +699,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -735,7 +735,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -768,7 +768,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -801,7 +801,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -835,7 +835,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -867,7 +867,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -890,7 +890,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -913,7 +913,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -937,7 +937,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -965,7 +965,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -989,7 +989,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1013,7 +1013,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1036,7 +1036,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1059,7 +1059,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1083,7 +1083,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1107,7 +1107,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1141,7 +1141,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1175,7 +1175,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1198,7 +1198,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1221,7 +1221,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1246,7 +1246,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1277,7 +1277,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1310,7 +1310,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1343,7 +1343,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1374,7 +1374,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1404,7 +1404,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1436,7 +1436,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1465,7 +1465,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1495,7 +1495,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1519,7 +1519,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1543,7 +1543,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1567,7 +1567,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1592,7 +1592,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1616,7 +1616,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1638,7 +1638,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1660,7 +1660,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1682,7 +1682,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1704,7 +1704,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1726,7 +1726,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1748,7 +1748,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { @@ -1771,7 +1771,7 @@ catch (std::runtime_error& e) { LogError(backend, e); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_DatabasePlugin; } catch (DatabaseException& e) { diff -r 0669d05b6de1 -r 87c77b9b3679 Plugins/Samples/StorageArea/Plugin.cpp --- a/Plugins/Samples/StorageArea/Plugin.cpp Wed Sep 23 13:39:00 2015 +0200 +++ b/Plugins/Samples/StorageArea/Plugin.cpp Wed Sep 23 14:42:20 2015 +0200 @@ -43,13 +43,13 @@ FILE* fp = fopen(path.c_str(), "wb"); if (!fp) { - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_StorageAreaPlugin; } bool ok = fwrite(content, size, 1, fp) == 1; fclose(fp); - return ok ? OrthancPluginErrorCode_Success : OrthancPluginErrorCode_Plugin; + return ok ? OrthancPluginErrorCode_Success : OrthancPluginErrorCode_StorageAreaPlugin; } @@ -63,13 +63,13 @@ FILE* fp = fopen(path.c_str(), "rb"); if (!fp) { - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_StorageAreaPlugin; } if (fseek(fp, 0, SEEK_END) < 0) { fclose(fp); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_StorageAreaPlugin; } *size = ftell(fp); @@ -77,7 +77,7 @@ if (fseek(fp, 0, SEEK_SET) < 0) { fclose(fp); - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_StorageAreaPlugin; } bool ok = true; @@ -98,7 +98,7 @@ fclose(fp); - return ok ? OrthancPluginErrorCode_Success : OrthancPluginErrorCode_Plugin; + return ok ? OrthancPluginErrorCode_Success : OrthancPluginErrorCode_StorageAreaPlugin; } @@ -113,7 +113,7 @@ } else { - return OrthancPluginErrorCode_Plugin; + return OrthancPluginErrorCode_StorageAreaPlugin; } } diff -r 0669d05b6de1 -r 87c77b9b3679 Resources/ErrorCodes.json --- a/Resources/ErrorCodes.json Wed Sep 23 13:39:00 2015 +0200 +++ b/Resources/ErrorCodes.json Wed Sep 23 14:42:20 2015 +0200 @@ -175,7 +175,16 @@ "Name": "BadFont", "Description": "Badly formatted font file" }, - + { + "Code": 31, + "Name": "DatabasePlugin", + "Description": "The plugin implementing a custom database back-end does not fulfill the proper interface" + }, + { + "Code": 32, + "Name": "StorageAreaPlugin", + "Description": "Error in the plugin implementing a custom storage area" + }, @@ -478,10 +487,10 @@ "Code": 2037, "Name": "DatabaseBackendAlreadyRegistered", "Description": "Another plugin has already registered a custom database back-end" - }, + }, { - "Code": 2038, - "Name": "DatabasePlugin", - "Description": "The plugin implementing a custom database back-end does not fulfill the proper interface" + "Code": 2038, + "Name": "DatabaseNotInitialized", + "Description": "Plugin trying to call the database during its initialization" } ]