Mercurial > hg > orthanc-webviewer
changeset 292:aadbffcee805
remove calls to deprecated classes of JsonCpp
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 22 Dec 2020 09:03:24 +0100 |
parents | 0cd081608fd3 |
children | e376158e2dbb |
files | Plugin/DecodedImageAdapter.cpp Plugin/ViewerPrefetchPolicy.cpp Plugin/ViewerToolbox.cpp Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h |
diffstat | 6 files changed, 146 insertions(+), 49 deletions(-) [+] |
line wrap: on
line diff
--- a/Plugin/DecodedImageAdapter.cpp Thu Dec 10 15:45:04 2020 +0100 +++ b/Plugin/DecodedImageAdapter.cpp Tue Dec 22 09:03:24 2020 +0100 @@ -31,7 +31,6 @@ #include <boost/lexical_cast.hpp> #include <boost/algorithm/string/predicate.hpp> -#include <json/writer.h> #include <boost/regex.hpp> @@ -172,9 +171,8 @@ { json["Orthanc"]["PhotometricInterpretation"] = photometric; } - - Json::FastWriter writer; - content = writer.write(json); + + Orthanc::Toolbox::WriteFastJson(content, json); return true; } else
--- a/Plugin/ViewerPrefetchPolicy.cpp Thu Dec 10 15:45:04 2020 +0100 +++ b/Plugin/ViewerPrefetchPolicy.cpp Tue Dec 22 09:03:24 2020 +0100 @@ -24,9 +24,7 @@ #include "ViewerToolbox.h" #include "Cache/CacheScheduler.h" -#include <json/value.h> -#include <json/reader.h> - +#include <Toolbox.h> static const Json::Value::ArrayIndex PREFETCH_FORWARD = 10; @@ -41,8 +39,7 @@ const std::string& content) { Json::Value json; - Json::Reader reader; - if (!reader.parse(content, json) || + if (!Orthanc::Toolbox::ReadJson(json, content) || !json.isMember("Slices")) { return; @@ -93,8 +90,7 @@ } Json::Value series; - Json::Reader reader; - if (!reader.parse(tmp, series) || + if (!Orthanc::Toolbox::ReadJson(series, tmp) || !series.isMember("Slices")) { return;
--- a/Plugin/ViewerToolbox.cpp Thu Dec 10 15:45:04 2020 +0100 +++ b/Plugin/ViewerToolbox.cpp Tue Dec 22 09:03:24 2020 +0100 @@ -28,7 +28,6 @@ // To gain access to ORTHANC_PLUGINS_VERSION_IS_ABOVE if Orthanc SDK <= 1.3.0 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" -#include <json/reader.h> #include <stdexcept> #include <boost/lexical_cast.hpp> #include <sys/stat.h> @@ -79,10 +78,7 @@ { try { - const char* data = reinterpret_cast<const char*>(answer.data); - Json::Reader reader; - if (!reader.parse(data, data + answer.size, json, - false /* don't collect comments */)) + if (!Orthanc::Toolbox::ReadJsonWithoutComments(json, answer.data, answer.size)) { return false; } @@ -227,8 +223,7 @@ OrthancPluginFreeString(context, tmp); } - Json::Reader reader; - if (reader.parse(s, configuration)) + if (Orthanc::Toolbox::ReadJson(configuration, s)) { return true; }
--- a/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Thu Dec 10 15:45:04 2020 +0100 +++ b/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Tue Dec 22 09:03:24 2020 +0100 @@ -120,6 +120,8 @@ set(ORTHANC_FRAMEWORK_MD5 "f8ec7554ef5d23ea4ce474b1e8214de9") elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.8.1") set(ORTHANC_FRAMEWORK_MD5 "db094f96399cbe8b9bbdbce34884c220") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.8.2") + set(ORTHANC_FRAMEWORK_MD5 "8bfa10e66c9931e74111be0bfb1f4548") # Below this point are development snapshots that were used to # release some plugin, before an official release of the Orthanc @@ -134,6 +136,9 @@ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "82652c5fc04f") # Stone Web viewer 1.0 (framework pre-1.8.1) set(ORTHANC_FRAMEWORK_MD5 "d77331d68917e66a3f4f9b807bbdab7f") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "4a3ba4bf4ba7") + # PostgreSQL 3.3 (framework pre-1.8.2) + set(ORTHANC_FRAMEWORK_MD5 "2d82bddf06f9cfe82095495cb3b8abde") endif() endif() endif() @@ -529,6 +534,16 @@ include_directories(${DCMTK_INCLUDE_DIRS}) link_libraries(${DCMTK_LIBRARIES}) endif() + + # Optional component - OpenSSL + if (ENABLE_SSL) + include(FindOpenSSL) + if (NOT ${OPENSSL_FOUND}) + message(FATAL_ERROR "Unable to find OpenSSL") + endif() + include_directories(${OPENSSL_INCLUDE_DIR}) + link_libraries(${OPENSSL_LIBRARIES}) + endif() endif() # Look for Orthanc framework shared library
--- a/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Thu Dec 10 15:45:04 2020 +0100 +++ b/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Tue Dec 22 09:03:24 2020 +0100 @@ -24,9 +24,33 @@ #include <boost/algorithm/string/predicate.hpp> #include <boost/move/unique_ptr.hpp> #include <boost/thread.hpp> + + #include <json/reader.h> +#include <json/version.h> #include <json/writer.h> +#if !defined(JSONCPP_VERSION_MAJOR) || !defined(JSONCPP_VERSION_MINOR) +# error Cannot access the version of JsonCpp +#endif + + +/** + * We use deprecated "Json::Reader", "Json::StyledWriter" and + * "Json::FastWriter" if JsonCpp < 1.7.0. This choice is rather + * arbitrary, but if Json >= 1.9.0, gcc generates explicit deprecation + * warnings (clang was warning in earlier versions). For reference, + * these classes seem to have been deprecated since JsonCpp 1.4.0 (on + * February 2015) by the following changeset: + * https://github.com/open-source-parsers/jsoncpp/commit/8df98f6112890d6272734975dd6d70cf8999bb22 + **/ +#if (JSONCPP_VERSION_MAJOR >= 2 || \ + (JSONCPP_VERSION_MAJOR == 1 && JSONCPP_VERSION_MINOR >= 8)) +# define JSONCPP_USE_DEPRECATED 0 +#else +# define JSONCPP_USE_DEPRECATED 1 +#endif + #if !ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 2, 0) static const OrthancPluginErrorCode OrthancPluginErrorCode_NullPointer = OrthancPluginErrorCode_Plugin; @@ -202,10 +226,7 @@ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); } - const char* tmp = reinterpret_cast<const char*>(buffer_.data); - - Json::Reader reader; - if (!reader.parse(tmp, tmp + buffer_.size, target)) + if (!ReadJson(target, buffer_.data, buffer_.size)) { LogError("Cannot convert some memory buffer to JSON"); ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); @@ -292,12 +313,75 @@ } + bool ReadJson(Json::Value& target, + const std::string& source) + { + return ReadJson(target, source.empty() ? NULL : source.c_str(), source.size()); + } + + + bool ReadJson(Json::Value& target, + const void* buffer, + size_t size) + { +#if JSONCPP_USE_DEPRECATED == 1 + Json::Reader reader; + return reader.parse(reinterpret_cast<const char*>(buffer), + reinterpret_cast<const char*>(buffer) + size, target); +#else + Json::CharReaderBuilder builder; + const std::unique_ptr<Json::CharReader> reader(builder.newCharReader()); + assert(reader.get() != NULL); + JSONCPP_STRING err; + if (reader->parse(reinterpret_cast<const char*>(buffer), + reinterpret_cast<const char*>(buffer) + size, &target, &err)) + { + return true; + } + else + { + LogError("Cannot parse JSON: " + err); + return false; + } +#endif + } + + + void WriteFastJson(std::string& target, + const Json::Value& source) + { +#if JSONCPP_USE_DEPRECATED == 1 + Json::FastWriter writer; + target = writer.write(source); +#else + Json::StreamWriterBuilder builder; + builder.settings_["indentation"] = ""; + target = Json::writeString(builder, source); +#endif + } + + + void WriteStyledJson(std::string& target, + const Json::Value& source) + { +#if JSONCPP_USE_DEPRECATED == 1 + Json::StyledWriter writer; + target = writer.write(source); +#else + Json::StreamWriterBuilder builder; + builder.settings_["indentation"] = " "; + target = Json::writeString(builder, source); +#endif + } + + bool MemoryBuffer::RestApiPost(const std::string& uri, const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPost(uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPost(uri, s, applyPlugins); } @@ -305,8 +389,9 @@ const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPut(uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPut(uri, s, applyPlugins); } @@ -315,8 +400,8 @@ { Clear(); - Json::FastWriter writer; - std::string s = writer.write(tags); + std::string s; + WriteFastJson(s, tags); Check(OrthancPluginCreateDicom(GetGlobalContext(), &buffer_, s.c_str(), NULL, flags)); } @@ -327,8 +412,8 @@ { Clear(); - Json::FastWriter writer; - std::string s = writer.write(tags); + std::string s; + WriteFastJson(s, tags); Check(OrthancPluginCreateDicom(GetGlobalContext(), &buffer_, s.c_str(), pixelData.GetObject(), flags)); } @@ -390,8 +475,7 @@ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); } - Json::Reader reader; - if (!reader.parse(str_, target)) + if (!ReadJson(target, str_)) { LogError("Cannot convert some memory buffer to JSON"); ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); @@ -1190,19 +1274,16 @@ #endif /* HAS_ORTHANC_PLUGIN_FIND_MATCHER == 1 */ void AnswerJson(const Json::Value& value, - OrthancPluginRestOutput* output - ) + OrthancPluginRestOutput* output) { - Json::StyledWriter writer; - std::string bodyString = writer.write(value); - + std::string bodyString; + WriteStyledJson(bodyString, value); OrthancPluginAnswerBuffer(GetGlobalContext(), output, bodyString.c_str(), bodyString.size(), "application/json"); } void AnswerString(const std::string& answer, const char* mimeType, - OrthancPluginRestOutput* output - ) + OrthancPluginRestOutput* output) { OrthancPluginAnswerBuffer(GetGlobalContext(), output, answer.c_str(), answer.size(), mimeType); } @@ -1324,8 +1405,9 @@ const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPost(result, uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPost(result, uri, s, applyPlugins); } @@ -1357,8 +1439,9 @@ const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPut(result, uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPut(result, uri, s, applyPlugins); } @@ -2020,8 +2103,7 @@ } else { - Json::FastWriter writer; - content_ = writer.write(content); + WriteFastJson(content_, content); } } @@ -2041,8 +2123,7 @@ } else { - Json::FastWriter writer; - serialized_ = writer.write(serialized); + WriteFastJson(serialized_, serialized); hasSerialized_ = true; } } @@ -2902,8 +2983,7 @@ std::string body; Execute(answerHeaders, body); - Json::Reader reader; - if (!reader.parse(body, answerBody)) + if (!ReadJson(answerBody, body)) { LogError("Cannot convert HTTP answer body to JSON"); ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat);
--- a/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Thu Dec 10 15:45:04 2020 +0100 +++ b/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Tue Dec 22 09:03:24 2020 +0100 @@ -476,6 +476,19 @@ #endif + bool ReadJson(Json::Value& target, + const std::string& source); + + bool ReadJson(Json::Value& target, + const void* buffer, + size_t size); + + void WriteFastJson(std::string& target, + const Json::Value& source); + + void WriteStyledJson(std::string& target, + const Json::Value& source); + bool RestApiGet(Json::Value& result, const std::string& uri, bool applyPlugins);