Imported Upstream version 0.9.2
[platform/upstream/iotivity.git] / android / android_api / base / jni / JniUtils.cpp
index 6ec806c..e26a82c 100644 (file)
-/*\r
-* //******************************************************************\r
-* //\r
-* // Copyright 2015 Intel Corporation.\r
-* //\r
-* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-* //\r
-* // Licensed under the Apache License, Version 2.0 (the "License");\r
-* // you may not use this file except in compliance with the License.\r
-* // You may obtain a copy of the License at\r
-* //\r
-* //      http://www.apache.org/licenses/LICENSE-2.0\r
-* //\r
-* // Unless required by applicable law or agreed to in writing, software\r
-* // distributed under the License is distributed on an "AS IS" BASIS,\r
-* // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-* // See the License for the specific language governing permissions and\r
-* // limitations under the License.\r
-* //\r
-* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-*/\r
-\r
-#include "JniUtils.h"\r
-#include "JniOcRepresentation.h"\r
-\r
-jobject JniUtils::convertStrVectorToJavaStrList(JNIEnv *env, std::vector<std::string> &vector)\r
-{\r
-    jobject jList = env->NewObject(g_cls_LinkedList, g_mid_LinkedList_ctor);\r
-    if (!jList) return nullptr;\r
-    for (size_t i = 0; i < vector.size(); ++i)\r
-    {\r
-        jstring jStr = env->NewStringUTF(vector[i].c_str());\r
-        if (!jStr) return nullptr;\r
-        env->CallBooleanMethod(jList, g_mid_LinkedList_add_object, jStr);\r
-        if (env->ExceptionCheck()) return nullptr;\r
-        env->DeleteLocalRef(jStr);\r
-    }\r
-    return jList;\r
-}\r
-\r
-void JniUtils::convertJavaStrArrToStrVector(JNIEnv *env, jobjectArray jStrArr, std::vector<std::string> &vector)\r
-{\r
-    if (!jStrArr) return;\r
-\r
-    jsize len = env->GetArrayLength(jStrArr);\r
-    for (jsize i = 0; i < len; ++i)\r
-    {\r
-        jstring jStr = (jstring)env->GetObjectArrayElement(jStrArr, i);\r
-        if (!jStr) return;\r
-        vector.push_back(env->GetStringUTFChars(jStr, NULL));\r
-        if (env->ExceptionCheck()) return;\r
-        env->DeleteLocalRef(jStr);\r
-    }\r
-}\r
-\r
-void JniUtils::convertJavaHeaderOptionsArrToVector(JNIEnv *env, jobjectArray jHeaderOptions,\r
-    OC::HeaderOptions &headerOptions)\r
-{\r
-    if (!jHeaderOptions) return;\r
-\r
-    jsize len = env->GetArrayLength(jHeaderOptions);\r
-    for (jsize i = 0; i < len; ++i)\r
-    {\r
-        jobject header = env->GetObjectArrayElement(jHeaderOptions, i);\r
-        if (!header) nullptr;\r
-        jint jId = env->CallIntMethod(header, g_mid_OcHeaderOption_get_id);\r
-        jstring jData = (jstring)env->CallObjectMethod(header, g_mid_OcHeaderOption_get_data);\r
-        if (jData) return;\r
-\r
-        OC::HeaderOption::OCHeaderOption hopt(\r
-            static_cast<int>(jId),\r
-            env->GetStringUTFChars(jData, NULL));\r
-\r
-        headerOptions.push_back(hopt);\r
-\r
-        if (env->ExceptionCheck()) return;\r
-        env->DeleteLocalRef(header);\r
-        env->DeleteLocalRef(jData);\r
-    }\r
-}\r
-\r
-jobject JniUtils::convertHeaderOptionsVectorToJavaList(JNIEnv *env, const OC::HeaderOptions& headerOptions)\r
-{\r
-    jobject jHeaderOptionList = env->NewObject(g_cls_LinkedList, g_mid_LinkedList_ctor);\r
-    if (!jHeaderOptionList) return nullptr;\r
-\r
-    for (size_t i = 0; i < headerOptions.size(); ++i)\r
-    {\r
-        jobject jHeaderOption = env->NewObject(\r
-            g_cls_OcHeaderOption,\r
-            g_mid_OcHeaderOption_ctor,\r
-            static_cast<jint>(headerOptions[i].getOptionID()),\r
-            env->NewStringUTF(headerOptions[i].getOptionData().c_str())\r
-            );\r
-        if (!jHeaderOption) return nullptr;\r
-\r
-        env->CallBooleanMethod(jHeaderOptionList, g_mid_LinkedList_add_object, jHeaderOption);\r
-        if (env->ExceptionCheck()) return nullptr;\r
-        env->DeleteLocalRef(jHeaderOption);\r
-    }\r
-\r
-    return jHeaderOptionList;\r
-}\r
-\r
-void JniUtils::convertJavaMapToQueryParamsMap(JNIEnv *env, jobject hashMap, OC::QueryParamsMap &map)\r
-{\r
-    if (!hashMap) return;\r
-\r
-    jobject jEntrySet = env->CallObjectMethod(hashMap, g_mid_Map_entrySet);\r
-    jobject jIterator = env->CallObjectMethod(jEntrySet, g_mid_Set_iterator);\r
-    if (!jEntrySet || !jIterator || env->ExceptionCheck()) return;\r
-\r
-    while (env->CallBooleanMethod(jIterator, g_mid_Iterator_hasNext))\r
-    {\r
-        jobject jEntry = env->CallObjectMethod(jIterator, g_mid_Iterator_next);\r
-        if (!jEntry) return;\r
-        jstring jKey = (jstring)env->CallObjectMethod(jEntry, g_mid_MapEntry_getKey);\r
-        if (!jKey) return;\r
-        jstring jValue = (jstring)env->CallObjectMethod(jEntry, g_mid_MapEntry_getValue);\r
-        if (!jValue) return;\r
-\r
-        map.insert(std::make_pair(env->GetStringUTFChars(jKey, NULL),\r
-            env->GetStringUTFChars(jValue, NULL)));\r
-\r
-        if (env->ExceptionCheck()) return;\r
-        env->DeleteLocalRef(jEntry);\r
-        env->DeleteLocalRef(jKey);\r
-        env->DeleteLocalRef(jValue);\r
-    }\r
-}\r
-\r
-jobject JniUtils::convertQueryParamsMapToJavaMap(JNIEnv *env, const OC::QueryParamsMap &map)\r
-{\r
-    jobject hashMap = env->NewObject(g_cls_HashMap, g_mid_HashMap_ctor);\r
-    if (!hashMap) return nullptr;\r
-\r
-    for (auto it = map.begin(); it != map.end(); ++it)\r
-    {\r
-        std::string key = it->first;\r
-        std::string value = it->second;\r
-\r
-        env->CallObjectMethod(hashMap,\r
-            g_mid_HashMap_put,\r
-            env->NewStringUTF(key.c_str()),\r
-            env->NewStringUTF(value.c_str()));\r
-        if (env->ExceptionCheck()) return nullptr;\r
-    }\r
-\r
-    return hashMap;\r
-}\r
-\r
-void JniUtils::convertJavaRepresentationArrToVector(JNIEnv *env,\r
-    jobjectArray jRepresentationArray,\r
-    std::vector<OC::OCRepresentation>& representationVector)\r
-{\r
-    if (!jRepresentationArray) return;\r
-    jsize len = env->GetArrayLength(jRepresentationArray);\r
-\r
-    for (jsize i = 0; i < len; ++i)\r
-    {\r
-        jobject jRep = env->GetObjectArrayElement(jRepresentationArray, i);\r
-        if (!jRep) return;\r
-        OC::OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, jRep);\r
-        representationVector.push_back(*rep);\r
-        if (env->ExceptionCheck()) return;\r
-        env->DeleteLocalRef(jRep);\r
-    }\r
-}\r
-\r
-jobjectArray JniUtils::convertRepresentationVectorToJavaArray(JNIEnv *env,\r
-    const std::vector<OC::OCRepresentation>& representationVector)\r
-{\r
-    jsize len = static_cast<jsize>(representationVector.size());\r
-    jobjectArray repArr = env->NewObjectArray(len, g_cls_OcRepresentation, NULL);\r
-    if (!repArr) return nullptr;\r
-    for (jsize i = 0; i < len; ++i)\r
-    {\r
-        OCRepresentation* rep = new OCRepresentation(representationVector[i]);\r
-        jlong handle = reinterpret_cast<jlong>(rep);\r
-        jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,\r
-            handle, true);\r
-        if (!jRepresentation)\r
-        {\r
-            delete rep;\r
-            return nullptr;\r
-        }\r
-        env->SetObjectArrayElement(repArr, i, jRepresentation);\r
-        if (env->ExceptionCheck()) return nullptr;\r
-        env->DeleteLocalRef(jRepresentation);\r
-    }\r
-\r
-    return repArr;\r
+/*
+* //******************************************************************
+* //
+* // Copyright 2015 Intel Corporation.
+* //
+* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+* //
+* // Licensed under the Apache License, Version 2.0 (the "License");
+* // you may not use this file except in compliance with the License.
+* // You may obtain a copy of the License at
+* //
+* //      http://www.apache.org/licenses/LICENSE-2.0
+* //
+* // Unless required by applicable law or agreed to in writing, software
+* // distributed under the License is distributed on an "AS IS" BASIS,
+* // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* // See the License for the specific language governing permissions and
+* // limitations under the License.
+* //
+* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+*/
+
+#include "JniUtils.h"
+#include "JniOcRepresentation.h"
+
+jobject JniUtils::convertStrVectorToJavaStrList(JNIEnv *env, std::vector<std::string> &vector)
+{
+    jobject jList = env->NewObject(g_cls_LinkedList, g_mid_LinkedList_ctor);
+    if (!jList) return nullptr;
+    for (size_t i = 0; i < vector.size(); ++i)
+    {
+        jstring jStr = env->NewStringUTF(vector[i].c_str());
+        if (!jStr) return nullptr;
+        env->CallBooleanMethod(jList, g_mid_LinkedList_add_object, jStr);
+        if (env->ExceptionCheck()) return nullptr;
+        env->DeleteLocalRef(jStr);
+    }
+    return jList;
+}
+
+void JniUtils::convertJavaStrArrToStrVector(JNIEnv *env, jobjectArray jStrArr, std::vector<std::string> &vector)
+{
+    if (!jStrArr) return;
+
+    jsize len = env->GetArrayLength(jStrArr);
+    for (jsize i = 0; i < len; ++i)
+    {
+        jstring jStr = (jstring)env->GetObjectArrayElement(jStrArr, i);
+        if (!jStr) return;
+        vector.push_back(env->GetStringUTFChars(jStr, NULL));
+        if (env->ExceptionCheck()) return;
+        env->DeleteLocalRef(jStr);
+    }
+}
+
+void JniUtils::convertJavaHeaderOptionsArrToVector(JNIEnv *env, jobjectArray jHeaderOptions,
+    OC::HeaderOptions &headerOptions)
+{
+    if (!jHeaderOptions) return;
+    jsize len = env->GetArrayLength(jHeaderOptions);
+    for (jsize i = 0; i < len; ++i)
+    {
+        jobject header = env->GetObjectArrayElement(jHeaderOptions, i);
+        if (!header) return;
+        jint jId = env->CallIntMethod(header, g_mid_OcHeaderOption_get_id);
+        jstring jData = (jstring)env->CallObjectMethod(header, g_mid_OcHeaderOption_get_data);
+        OC::HeaderOption::OCHeaderOption hopt(
+            static_cast<int>(jId),
+            env->GetStringUTFChars(jData, NULL));
+
+        headerOptions.push_back(hopt);
+
+        if (env->ExceptionCheck()) return;
+        env->DeleteLocalRef(header);
+        env->DeleteLocalRef(jData);
+    }
+}
+
+jobject JniUtils::convertHeaderOptionsVectorToJavaList(JNIEnv *env, const OC::HeaderOptions& headerOptions)
+{
+    jobject jHeaderOptionList = env->NewObject(g_cls_LinkedList, g_mid_LinkedList_ctor);
+    if (!jHeaderOptionList) return nullptr;
+
+    for (size_t i = 0; i < headerOptions.size(); ++i)
+    {
+        jobject jHeaderOption = env->NewObject(
+            g_cls_OcHeaderOption,
+            g_mid_OcHeaderOption_ctor,
+            static_cast<jint>(headerOptions[i].getOptionID()),
+            env->NewStringUTF(headerOptions[i].getOptionData().c_str())
+            );
+        if (!jHeaderOption) return nullptr;
+
+        env->CallBooleanMethod(jHeaderOptionList, g_mid_LinkedList_add_object, jHeaderOption);
+        if (env->ExceptionCheck()) return nullptr;
+        env->DeleteLocalRef(jHeaderOption);
+    }
+
+    return jHeaderOptionList;
+}
+
+void JniUtils::convertJavaMapToQueryParamsMap(JNIEnv *env, jobject hashMap, OC::QueryParamsMap &map)
+{
+    if (!hashMap) return;
+
+    jobject jEntrySet = env->CallObjectMethod(hashMap, g_mid_Map_entrySet);
+    jobject jIterator = env->CallObjectMethod(jEntrySet, g_mid_Set_iterator);
+    if (!jEntrySet || !jIterator || env->ExceptionCheck()) return;
+
+    while (env->CallBooleanMethod(jIterator, g_mid_Iterator_hasNext))
+    {
+        jobject jEntry = env->CallObjectMethod(jIterator, g_mid_Iterator_next);
+        if (!jEntry) return;
+        jstring jKey = (jstring)env->CallObjectMethod(jEntry, g_mid_MapEntry_getKey);
+        if (!jKey) return;
+        jstring jValue = (jstring)env->CallObjectMethod(jEntry, g_mid_MapEntry_getValue);
+        if (!jValue) return;
+
+        map.insert(std::make_pair(env->GetStringUTFChars(jKey, NULL),
+            env->GetStringUTFChars(jValue, NULL)));
+
+        if (env->ExceptionCheck()) return;
+        env->DeleteLocalRef(jEntry);
+        env->DeleteLocalRef(jKey);
+        env->DeleteLocalRef(jValue);
+    }
+}
+
+jobject JniUtils::convertQueryParamsMapToJavaMap(JNIEnv *env, const OC::QueryParamsMap &map)
+{
+    jobject hashMap = env->NewObject(g_cls_HashMap, g_mid_HashMap_ctor);
+    if (!hashMap) return nullptr;
+
+    for (auto it = map.begin(); it != map.end(); ++it)
+    {
+        std::string key = it->first;
+        std::string value = it->second;
+
+        env->CallObjectMethod(hashMap,
+            g_mid_HashMap_put,
+            env->NewStringUTF(key.c_str()),
+            env->NewStringUTF(value.c_str()));
+        if (env->ExceptionCheck()) return nullptr;
+    }
+
+    return hashMap;
+}
+
+void JniUtils::convertJavaRepresentationArrToVector(JNIEnv *env,
+    jobjectArray jRepresentationArray,
+    std::vector<OC::OCRepresentation>& representationVector)
+{
+    if (!jRepresentationArray) return;
+    jsize len = env->GetArrayLength(jRepresentationArray);
+
+    for (jsize i = 0; i < len; ++i)
+    {
+        jobject jRep = env->GetObjectArrayElement(jRepresentationArray, i);
+        if (!jRep) return;
+        OC::OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, jRep);
+        representationVector.push_back(*rep);
+        if (env->ExceptionCheck()) return;
+        env->DeleteLocalRef(jRep);
+    }
+}
+
+jobjectArray JniUtils::convertRepresentationVectorToJavaArray(JNIEnv *env,
+    const std::vector<OC::OCRepresentation>& representationVector)
+{
+    jsize len = static_cast<jsize>(representationVector.size());
+    jobjectArray repArr = env->NewObjectArray(len, g_cls_OcRepresentation, NULL);
+    if (!repArr) return nullptr;
+    for (jsize i = 0; i < len; ++i)
+    {
+        OCRepresentation* rep = new OCRepresentation(representationVector[i]);
+        jlong handle = reinterpret_cast<jlong>(rep);
+        jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,
+            handle, true);
+        if (!jRepresentation)
+        {
+            delete rep;
+            return nullptr;
+        }
+        env->SetObjectArrayElement(repArr, i, jRepresentation);
+        if (env->ExceptionCheck()) return nullptr;
+        env->DeleteLocalRef(jRepresentation);
+    }
+
+    return repArr;
 }
\ No newline at end of file