From 72a2667972f36d2c64b17f5ceab78dc035b95c83 Mon Sep 17 00:00:00 2001 From: BINDUCHAITANYA TUMMALA Date: Thu, 4 Apr 2013 11:47:03 +0530 Subject: [PATCH] addition ot compose unescape api to jsonwriter Change-Id: I52bad5494f82d1edeaba19f7fdaea637deb1b80c Signed-off-by: BINDUCHAITANYA TUMMALA --- inc/FWebJsonJsonWriter.h | 15 ++++++++++- src/FWebJsonJsonWriter.cpp | 9 +++++++ src/FWebJson_JsonWriterImpl.cpp | 56 +++++++++++++++++++++++++++++++++++------ src/FWebJson_JsonWriterImpl.h | 8 +++--- 4 files changed, 76 insertions(+), 12 deletions(-) diff --git a/inc/FWebJsonJsonWriter.h b/inc/FWebJsonJsonWriter.h index b61d89d..4841810 100755 --- a/inc/FWebJsonJsonWriter.h +++ b/inc/FWebJsonJsonWriter.h @@ -143,11 +143,24 @@ public: * @param[out] buffer The buffer with JSON-encoded data * @exception E_SUCCESS The method is successful. * @exception E_INVALID_DATA The specified @c pValue is @c null. - * @exception E_FAILURE The method has failed. * @remarks The ByteBuffer parameter has to be constructed with a non-zero capacity before calling this method. */ static result Compose(const IJsonValue* pValue, Tizen::Base::ByteBuffer& buffer); + /** + * Serializes the JSON-encoded data from IJsonValue to Tizen::Base::ByteBuffer with unescaped wide characters. + * + * @since 2.0 + * + * @return An error code + * @param[in] pValue The JSON value to encode + * @param[out] buffer The buffer with JSON-encoded data + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_DATA The specified @c pValue is @c null. + * @remarks The ByteBuffer parameter has to be constructed with a non-zero capacity before calling this method. + */ + static result ComposeUnescapeUnicode(const IJsonValue* pValue, Tizen::Base::ByteBuffer& buffer); + private: // // This default constructor is intentionally declared as private because this class cannot be constructed. diff --git a/src/FWebJsonJsonWriter.cpp b/src/FWebJsonJsonWriter.cpp index a3a7054..adecbdf 100644 --- a/src/FWebJsonJsonWriter.cpp +++ b/src/FWebJsonJsonWriter.cpp @@ -73,4 +73,13 @@ JsonWriter::Compose(const IJsonValue* pValue, ByteBuffer& buffer) } +result +JsonWriter::ComposeUnescapeUnicode(const IJsonValue* pValue, ByteBuffer& buffer) +{ + SysLog(NID_WEB_JSON, "pValue : %x", pValue); + + return _JsonWriterImpl::ComposeUnescapeUnicode(pValue, buffer); +} + + }}} // Tizen::Web::Json diff --git a/src/FWebJson_JsonWriterImpl.cpp b/src/FWebJson_JsonWriterImpl.cpp index 52ae101..50a6fe1 100644 --- a/src/FWebJson_JsonWriterImpl.cpp +++ b/src/FWebJson_JsonWriterImpl.cpp @@ -99,6 +99,8 @@ _JsonWriterImpl::Compose(const IJsonValue* pValue, void* pBuffer, int bufferLeng unique_ptr pText(_StringConverter::CopyToCharArrayN(output)); SysTryReturn(NID_WEB_JSON, pText.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + memset(pBuffer, '\0', bufferLength); + int charCount = strlen(pText.get()); charCount = (charCount <= bufferLength) ? charCount : bufferLength; SysLog(NID_WEB_JSON, "[%d] characters written to given buffer", charCount); @@ -149,7 +151,47 @@ _JsonWriterImpl::Compose(const IJsonValue* pValue, ByteBuffer& buffer) result -_JsonWriterImpl::ConvertIJsonToString(IJsonValue* pValue, String& outString) +_JsonWriterImpl::ComposeUnescapeUnicode(const IJsonValue* pValue, Tizen::Base::ByteBuffer& buffer) +{ + SysTryReturnResult(NID_WEB_JSON, pValue, E_INVALID_DATA, "Invalid Input parameter."); + + String output; + result r = ConvertIJsonToString(const_cast(pValue), output, true); + SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + unique_ptr pByteBuf(StringUtil::StringToUtf8N(output)); + SysTryReturn(NID_WEB_JSON, pByteBuf.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + + if (buffer.GetPointer()) + { + int givenCapacity = buffer.GetCapacity(); + int requiredCapacity = pByteBuf->GetCapacity(); + + if (givenCapacity < requiredCapacity) + { + r = buffer.ExpandCapacity(requiredCapacity); + SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + } + + buffer.Clear(); + + r = buffer.CopyFrom(*pByteBuf); + SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + buffer.Flip(); + } + else + { + r = buffer.Construct(*pByteBuf); + SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + } + + return r; +} + + +result +_JsonWriterImpl::ConvertIJsonToString(IJsonValue* pValue, String& outString, bool unEscUnicode) { SysTryReturnResult(NID_WEB_JSON, pValue, E_INVALID_ARG, "input JsonValue pointer is null"); @@ -176,7 +218,7 @@ _JsonWriterImpl::ConvertIJsonToString(IJsonValue* pValue, String& outString) SysTryReturn(NID_WEB_JSON, pKey, r, r, "[%s]Propagating.", GetErrorMessage(r)); String escString; - r = ToEscString(*pKey, escString); + r = ToEscString(*pKey, escString, unEscUnicode); SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); outString.Append(QUOTE); @@ -187,7 +229,7 @@ _JsonWriterImpl::ConvertIJsonToString(IJsonValue* pValue, String& outString) SysTryReturn(NID_WEB_JSON, pObjectValue, r, r, "[%s] Propagating.", GetErrorMessage(r)); outString.Append(COLON); - r = ConvertIJsonToString(pObjectValue, outString); + r = ConvertIJsonToString(pObjectValue, outString, unEscUnicode); SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); if (--itemCount) @@ -212,7 +254,7 @@ _JsonWriterImpl::ConvertIJsonToString(IJsonValue* pValue, String& outString) r = pArray->GetAt(index, pArrayValue); SysTryReturn(NID_WEB_JSON, pArrayValue, r, r, "[%s] Propagating.", GetErrorMessage(r)); - r = ConvertIJsonToString(pArrayValue, outString); + r = ConvertIJsonToString(pArrayValue, outString, unEscUnicode); SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); if (index != itemCount) @@ -228,7 +270,7 @@ _JsonWriterImpl::ConvertIJsonToString(IJsonValue* pValue, String& outString) case JSON_TYPE_STRING: { String escString; - r = ToEscString(*(static_cast(pValue)), escString); + r = ToEscString(*(static_cast(pValue)), escString, unEscUnicode); SysTryReturn(NID_WEB_JSON, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); outString.Append(QUOTE); @@ -268,7 +310,7 @@ _JsonWriterImpl::ConvertIJsonToString(IJsonValue* pValue, String& outString) result -_JsonWriterImpl::ToEscString(const String& unEscStr, String& escString) +_JsonWriterImpl::ToEscString(const String& unEscStr, String& escString, bool unEscUnicode) { const wchar_t* pUnEscBuf = unEscStr.GetPointer(); SysTryReturn(NID_WEB_JSON, pUnEscBuf, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); @@ -304,7 +346,7 @@ _JsonWriterImpl::ToEscString(const String& unEscStr, String& escString) escString.Append(L"\\t"); break; default: - if (pUnEscBuf[i] < 0x80) + if (unEscUnicode || pUnEscBuf[i] < 0x80) { escString.Append(pUnEscBuf[i]); } diff --git a/src/FWebJson_JsonWriterImpl.h b/src/FWebJson_JsonWriterImpl.h index 6dbead1..268bba7 100644 --- a/src/FWebJson_JsonWriterImpl.h +++ b/src/FWebJson_JsonWriterImpl.h @@ -61,7 +61,6 @@ public: * @param[out] pBuffer Buffer with Json encoded data. * @return An error code * @exception E_SUCCESS The method was successful. - * @exception E_FAILURE In case of error. */ static result Compose(const IJsonValue* pValue, void* pBuffer, int bufferLength); @@ -73,10 +72,11 @@ public: * @param[out] buffer Buffer with Json encoded data * @return An error code * @exception E_SUCCESS The method was successful. - * @exception E_FAILURE In case of error. */ static result Compose(const IJsonValue* pValue, Tizen::Base::ByteBuffer& buffer); + static result ComposeUnescapeUnicode(const IJsonValue* pValue, Tizen::Base::ByteBuffer& buffer); + private: /** * This is the default constructor for this class. @@ -92,9 +92,9 @@ private: */ virtual ~_JsonWriterImpl(void){} - static result ConvertIJsonToString(IJsonValue* pValue, Tizen::Base::String& outString); + static result ConvertIJsonToString(IJsonValue* pValue, Tizen::Base::String& outString, bool unEscUnicode = false); - static result ToEscString(const Tizen::Base::String& unEscStr, Tizen::Base::String& escString); + static result ToEscString(const Tizen::Base::String& unEscStr, Tizen::Base::String& escString, bool unEscUnicode = false); }; // _JsonWriterImpl -- 2.7.4