changeset 1583:9ea3d082b064

got rid of custom exceptions
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 25 Aug 2015 17:52:50 +0200
parents bd1889029cbb
children 39ecd34fb1c7
files Core/Enumerations.cpp Core/Enumerations.h Core/Lua/LuaContext.cpp Core/Lua/LuaContext.h Core/Lua/LuaException.h Core/Lua/LuaFunctionCall.cpp Core/OrthancException.h Plugins/Include/orthanc/OrthancCPlugin.h Resources/ErrorCodes.json UnitTestsSources/LuaTests.cpp UnitTestsSources/MultiThreadingTests.cpp
diffstat 11 files changed, 89 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/Core/Enumerations.cpp	Tue Aug 25 17:39:38 2015 +0200
+++ b/Core/Enumerations.cpp	Tue Aug 25 17:52:50 2015 +0200
@@ -46,9 +46,6 @@
   {
     switch (error)
     {
-      case ErrorCode_Custom:
-        return "Custom error, see the attached error message";
-
       case ErrorCode_InternalError:
         return "Internal error";
 
@@ -271,6 +268,27 @@
       case ErrorCode_BadJobOrdering:
         return "Bad ordering of filters in a job";
 
+      case ErrorCode_JsonToLuaTable:
+        return "Cannot convert the given JSON object to a Lua table";
+
+      case ErrorCode_CannotCreateLua:
+        return "Cannot create the Lua context";
+
+      case ErrorCode_CannotExecuteLua:
+        return "Cannot execute a Lua command";
+
+      case ErrorCode_LuaAlreadyExecuted:
+        return "Arguments cannot be pushed after the Lua function is executed";
+
+      case ErrorCode_LuaBadOutput:
+        return "The Lua function does not give the expected number of outputs";
+
+      case ErrorCode_NotLuaPredicate:
+        return "The Lua function is not a predicate (only true/false outputs allowed)";
+
+      case ErrorCode_LuaReturnsNoString:
+        return "The Lua function does not return a string";
+
       default:
         return "Unknown error code";
     }
--- a/Core/Enumerations.h	Tue Aug 25 17:39:38 2015 +0200
+++ b/Core/Enumerations.h	Tue Aug 25 17:52:50 2015 +0200
@@ -45,7 +45,6 @@
   // "Resources/GenerateErrorCodes.py"
   enum ErrorCode
   {
-    ErrorCode_Custom = -2    /*!< Custom error, see the attached error message */,
     ErrorCode_InternalError = -1    /*!< Internal error */,
     ErrorCode_Success = 0    /*!< Success */,
     ErrorCode_Plugin = 1    /*!< Error encountered within the plugin engine */,
@@ -119,7 +118,14 @@
     ErrorCode_CreateDicomParentIsInstance = 2025    /*!< Trying to attach a new DICOM instance to an instance (must be a series, study or patient) */,
     ErrorCode_CreateDicomParentEncoding = 2026    /*!< Unable to get the encoding of the parent resource */,
     ErrorCode_UnknownModality = 2027    /*!< Unknown modality */,
-    ErrorCode_BadJobOrdering = 2028    /*!< Bad ordering of filters in a job */
+    ErrorCode_BadJobOrdering = 2028    /*!< Bad ordering of filters in a job */,
+    ErrorCode_JsonToLuaTable = 2029    /*!< Cannot convert the given JSON object to a Lua table */,
+    ErrorCode_CannotCreateLua = 2030    /*!< Cannot create the Lua context */,
+    ErrorCode_CannotExecuteLua = 2031    /*!< Cannot execute a Lua command */,
+    ErrorCode_LuaAlreadyExecuted = 2032    /*!< Arguments cannot be pushed after the Lua function is executed */,
+    ErrorCode_LuaBadOutput = 2033    /*!< The Lua function does not give the expected number of outputs */,
+    ErrorCode_NotLuaPredicate = 2034    /*!< The Lua function is not a predicate (only true/false outputs allowed) */,
+    ErrorCode_LuaReturnsNoString = 2035    /*!< The Lua function does not return a string */
   };
 
   enum LogLevel
--- a/Core/Lua/LuaContext.cpp	Tue Aug 25 17:39:38 2015 +0200
+++ b/Core/Lua/LuaContext.cpp	Tue Aug 25 17:52:50 2015 +0200
@@ -34,6 +34,7 @@
 #include "LuaContext.h"
 
 #include "../Logging.h"
+#include "../OrthancException.h"
 
 #include <set>
 #include <cassert>
@@ -369,7 +370,7 @@
     }
     else
     {
-      throw LuaException("Unsupported JSON conversion");
+      throw OrthancException(ErrorCode_JsonToLuaTable);
     }
   }
 
@@ -484,7 +485,7 @@
     lua_ = luaL_newstate();
     if (!lua_)
     {
-      throw LuaException("Unable to create the Lua context");
+      throw OrthancException(ErrorCode_CannotCreateLua);
     }
 
     luaL_openlibs(lua_);
@@ -521,7 +522,7 @@
       std::string description(lua_tostring(lua_, -1));
       lua_pop(lua_, 1); /* pop error message from the stack */
       LOG(ERROR) << "Error while executing Lua script: " << description;
-      throw LuaException(description);
+      throw OrthancException(ErrorCode_CannotExecuteLua);
     }
 
     if (output != NULL)
--- a/Core/Lua/LuaContext.h	Tue Aug 25 17:39:38 2015 +0200
+++ b/Core/Lua/LuaContext.h	Tue Aug 25 17:52:50 2015 +0200
@@ -32,7 +32,6 @@
 
 #pragma once
 
-#include "LuaException.h"
 #include "../HttpClient.h"
 
 extern "C" 
--- a/Core/Lua/LuaException.h	Tue Aug 25 17:39:38 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#include "../OrthancException.h"
-
-namespace Orthanc
-{
-  class LuaException : public OrthancException
-  {
-  public:
-    LuaException(const char* explanation) : 
-      OrthancException(explanation)
-    {
-    }
-
-    LuaException(const std::string& explanation) : 
-      OrthancException(explanation)
-    {
-    }
-  };
-}
--- a/Core/Lua/LuaFunctionCall.cpp	Tue Aug 25 17:39:38 2015 +0200
+++ b/Core/Lua/LuaFunctionCall.cpp	Tue Aug 25 17:52:50 2015 +0200
@@ -33,6 +33,9 @@
 #include "../PrecompiledHeaders.h"
 #include "LuaFunctionCall.h"
 
+#include "../OrthancException.h"
+#include "../Logging.h"
+
 #include <cassert>
 #include <stdio.h>
 #include <boost/lexical_cast.hpp>
@@ -43,7 +46,7 @@
   {
     if (isExecuted_)
     {
-      throw LuaException("Arguments cannot be pushed after the function is executed");
+      throw OrthancException(ErrorCode_LuaAlreadyExecuted);
     }
   }
 
@@ -101,12 +104,14 @@
           
       std::string description(lua_tostring(context_.lua_, -1));
       lua_pop(context_.lua_, 1); /* pop error message from the stack */
-      throw LuaException(description);
+      LOG(ERROR) << description;
+
+      throw OrthancException(ErrorCode_CannotExecuteLua);
     }
 
     if (lua_gettop(context_.lua_) < numOutputs)
     {
-      throw LuaException("The function does not give the expected number of outputs");
+      throw OrthancException(ErrorCode_LuaBadOutput);
     }
 
     isExecuted_ = true;
@@ -118,7 +123,7 @@
     
     if (!lua_isboolean(context_.lua_, 1))
     {
-      throw LuaException("The function is not a predicate (only true/false outputs allowed)");
+      throw OrthancException(ErrorCode_NotLuaPredicate);
     }
 
     return lua_toboolean(context_.lua_, 1) != 0;
@@ -143,7 +148,7 @@
     }
     else
     {
-      throw LuaException("The function does not return a string");
+      throw OrthancException(ErrorCode_LuaReturnsNoString);
     }
   }
 }
--- a/Core/OrthancException.h	Tue Aug 25 17:39:38 2015 +0200
+++ b/Core/OrthancException.h	Tue Aug 25 17:52:50 2015 +0200
@@ -42,14 +42,6 @@
   protected:
     ErrorCode errorCode_;
     HttpStatus httpStatus_;
-    std::string custom_;
-
-    OrthancException(const std::string& custom) : 
-      errorCode_(ErrorCode_Custom),
-      httpStatus_(HttpStatus_500_InternalServerError),
-      custom_(custom)
-    {
-    }
 
   public:
     OrthancException(ErrorCode errorCode) : 
@@ -77,14 +69,7 @@
 
     const char* What() const
     {
-      if (errorCode_ == ErrorCode_Custom)
-      {
-        return custom_.c_str();
-      }
-      else
-      {
-        return EnumerationToString(errorCode_);
-      }
+      return EnumerationToString(errorCode_);
     }
   };
 }
--- a/Plugins/Include/orthanc/OrthancCPlugin.h	Tue Aug 25 17:39:38 2015 +0200
+++ b/Plugins/Include/orthanc/OrthancCPlugin.h	Tue Aug 25 17:52:50 2015 +0200
@@ -160,7 +160,6 @@
    **/
   typedef enum
   {
-    OrthancPluginErrorCode_Custom = -2    /*!< Custom error, see the attached error message */,
     OrthancPluginErrorCode_InternalError = -1    /*!< Internal error */,
     OrthancPluginErrorCode_Success = 0    /*!< Success */,
     OrthancPluginErrorCode_Plugin = 1    /*!< Error encountered within the plugin engine */,
@@ -235,6 +234,13 @@
     OrthancPluginErrorCode_CreateDicomParentEncoding = 2026    /*!< Unable to get the encoding of the parent resource */,
     OrthancPluginErrorCode_UnknownModality = 2027    /*!< Unknown modality */,
     OrthancPluginErrorCode_BadJobOrdering = 2028    /*!< Bad ordering of filters in a job */,
+    OrthancPluginErrorCode_JsonToLuaTable = 2029    /*!< Cannot convert the given JSON object to a Lua table */,
+    OrthancPluginErrorCode_CannotCreateLua = 2030    /*!< Cannot create the Lua context */,
+    OrthancPluginErrorCode_CannotExecuteLua = 2031    /*!< Cannot execute a Lua command */,
+    OrthancPluginErrorCode_LuaAlreadyExecuted = 2032    /*!< Arguments cannot be pushed after the Lua function is executed */,
+    OrthancPluginErrorCode_LuaBadOutput = 2033    /*!< The Lua function does not give the expected number of outputs */,
+    OrthancPluginErrorCode_NotLuaPredicate = 2034    /*!< The Lua function is not a predicate (only true/false outputs allowed) */,
+    OrthancPluginErrorCode_LuaReturnsNoString = 2035    /*!< The Lua function does not return a string */,
 
     _OrthancPluginErrorCode_INTERNAL = 0x7fffffff
   } OrthancPluginErrorCode;
--- a/Resources/ErrorCodes.json	Tue Aug 25 17:39:38 2015 +0200
+++ b/Resources/ErrorCodes.json	Tue Aug 25 17:52:50 2015 +0200
@@ -2,11 +2,6 @@
   /** Generic error codes **/
 
   {
-    "Code": -2, 
-    "Name": "Custom", 
-    "Description": "Custom error, see the attached error message"
-  }, 
-  {
     "Code": -1, 
     "Name": "InternalError", 
     "Description": "Internal error"
@@ -423,5 +418,40 @@
     "Code": 2028, 
     "Name": "BadJobOrdering", 
     "Description": "Bad ordering of filters in a job"
+  },
+  {
+    "Code": 2029, 
+    "Name": "JsonToLuaTable", 
+    "Description": "Cannot convert the given JSON object to a Lua table"
+  },
+  {
+    "Code": 2030, 
+    "Name": "CannotCreateLua", 
+    "Description": "Cannot create the Lua context"
+  },
+  {
+    "Code": 2031, 
+    "Name": "CannotExecuteLua", 
+    "Description": "Cannot execute a Lua command"
+  },
+  {
+    "Code": 2032, 
+    "Name": "LuaAlreadyExecuted", 
+    "Description": "Arguments cannot be pushed after the Lua function is executed"
+  },
+  {
+    "Code": 2033, 
+    "Name": "LuaBadOutput", 
+    "Description": "The Lua function does not give the expected number of outputs"
+  },
+  {
+    "Code": 2034, 
+    "Name": "NotLuaPredicate", 
+    "Description": "The Lua function is not a predicate (only true/false outputs allowed)"
+  },
+  {
+    "Code": 2035, 
+    "Name": "LuaReturnsNoString", 
+    "Description": "The Lua function does not return a string"
   }
 ]
--- a/UnitTestsSources/LuaTests.cpp	Tue Aug 25 17:39:38 2015 +0200
+++ b/UnitTestsSources/LuaTests.cpp	Tue Aug 25 17:52:50 2015 +0200
@@ -33,6 +33,7 @@
 #include "PrecompiledHeadersUnitTests.h"
 #include "gtest/gtest.h"
 
+#include "../Core/OrthancException.h"
 #include "../Core/Toolbox.h"
 #include "../Core/Lua/LuaFunctionCall.h"
 
@@ -79,7 +80,7 @@
   {
     Orthanc::LuaFunctionCall f(lua, "f");
     f.PushJson(o);
-    ASSERT_THROW(f.ExecutePredicate(), Orthanc::LuaException);
+    ASSERT_THROW(f.ExecutePredicate(), Orthanc::OrthancException);
   }
 
   o["bool"] = false;
--- a/UnitTestsSources/MultiThreadingTests.cpp	Tue Aug 25 17:39:38 2015 +0200
+++ b/UnitTestsSources/MultiThreadingTests.cpp	Tue Aug 25 17:52:50 2015 +0200
@@ -96,7 +96,7 @@
     SharedMessageQueue q;
     q.Enqueue(new DynamicInteger(10, s));
     q.Enqueue(new DynamicInteger(20, s));  
-    throw OrthancException(ErrorCode_Custom);
+    throw OrthancException(ErrorCode_InternalError);
   }
   catch (OrthancException&)
   {