2 * //******************************************************************
\r
4 * // Copyright 2015 Intel Corporation.
\r
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
8 * // Licensed under the Apache License, Version 2.0 (the "License");
\r
9 * // you may not use this file except in compliance with the License.
\r
10 * // You may obtain a copy of the License at
\r
12 * // http://www.apache.org/licenses/LICENSE-2.0
\r
14 * // Unless required by applicable law or agreed to in writing, software
\r
15 * // distributed under the License is distributed on an "AS IS" BASIS,
\r
16 * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
17 * // See the License for the specific language governing permissions and
\r
18 * // limitations under the License.
\r
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
23 #include "JniUtils.h"
\r
24 #include "JniOcRepresentation.h"
\r
26 jobject JniUtils::convertStrVectorToJavaStrList(JNIEnv *env, std::vector<std::string> &vector)
\r
28 jobject jList = env->NewObject(g_cls_LinkedList, g_mid_LinkedList_ctor);
\r
29 if (!jList) return nullptr;
\r
30 for (size_t i = 0; i < vector.size(); ++i)
\r
32 jstring jStr = env->NewStringUTF(vector[i].c_str());
\r
33 if (!jStr) return nullptr;
\r
34 env->CallBooleanMethod(jList, g_mid_LinkedList_add_object, jStr);
\r
35 if (env->ExceptionCheck()) return nullptr;
\r
36 env->DeleteLocalRef(jStr);
\r
41 void JniUtils::convertJavaStrArrToStrVector(JNIEnv *env, jobjectArray jStrArr, std::vector<std::string> &vector)
\r
43 if (!jStrArr) return;
\r
45 jsize len = env->GetArrayLength(jStrArr);
\r
46 for (jsize i = 0; i < len; ++i)
\r
48 jstring jStr = (jstring)env->GetObjectArrayElement(jStrArr, i);
\r
50 vector.push_back(env->GetStringUTFChars(jStr, NULL));
\r
51 if (env->ExceptionCheck()) return;
\r
52 env->DeleteLocalRef(jStr);
\r
56 void JniUtils::convertJavaHeaderOptionsArrToVector(JNIEnv *env, jobjectArray jHeaderOptions,
\r
57 OC::HeaderOptions &headerOptions)
\r
59 if (!jHeaderOptions) return;
\r
61 jsize len = env->GetArrayLength(jHeaderOptions);
\r
62 for (jsize i = 0; i < len; ++i)
\r
64 jobject header = env->GetObjectArrayElement(jHeaderOptions, i);
\r
65 if (!header) nullptr;
\r
66 jint jId = env->CallIntMethod(header, g_mid_OcHeaderOption_get_id);
\r
67 jstring jData = (jstring)env->CallObjectMethod(header, g_mid_OcHeaderOption_get_data);
\r
70 OC::HeaderOption::OCHeaderOption hopt(
\r
71 static_cast<int>(jId),
\r
72 env->GetStringUTFChars(jData, NULL));
\r
74 headerOptions.push_back(hopt);
\r
76 if (env->ExceptionCheck()) return;
\r
77 env->DeleteLocalRef(header);
\r
78 env->DeleteLocalRef(jData);
\r
82 jobject JniUtils::convertHeaderOptionsVectorToJavaList(JNIEnv *env, const OC::HeaderOptions& headerOptions)
\r
84 jobject jHeaderOptionList = env->NewObject(g_cls_LinkedList, g_mid_LinkedList_ctor);
\r
85 if (!jHeaderOptionList) return nullptr;
\r
87 for (size_t i = 0; i < headerOptions.size(); ++i)
\r
89 jobject jHeaderOption = env->NewObject(
\r
90 g_cls_OcHeaderOption,
\r
91 g_mid_OcHeaderOption_ctor,
\r
92 static_cast<jint>(headerOptions[i].getOptionID()),
\r
93 env->NewStringUTF(headerOptions[i].getOptionData().c_str())
\r
95 if (!jHeaderOption) return nullptr;
\r
97 env->CallBooleanMethod(jHeaderOptionList, g_mid_LinkedList_add_object, jHeaderOption);
\r
98 if (env->ExceptionCheck()) return nullptr;
\r
99 env->DeleteLocalRef(jHeaderOption);
\r
102 return jHeaderOptionList;
\r
105 void JniUtils::convertJavaMapToQueryParamsMap(JNIEnv *env, jobject hashMap, OC::QueryParamsMap &map)
\r
107 if (!hashMap) return;
\r
109 jobject jEntrySet = env->CallObjectMethod(hashMap, g_mid_Map_entrySet);
\r
110 jobject jIterator = env->CallObjectMethod(jEntrySet, g_mid_Set_iterator);
\r
111 if (!jEntrySet || !jIterator || env->ExceptionCheck()) return;
\r
113 while (env->CallBooleanMethod(jIterator, g_mid_Iterator_hasNext))
\r
115 jobject jEntry = env->CallObjectMethod(jIterator, g_mid_Iterator_next);
\r
116 if (!jEntry) return;
\r
117 jstring jKey = (jstring)env->CallObjectMethod(jEntry, g_mid_MapEntry_getKey);
\r
119 jstring jValue = (jstring)env->CallObjectMethod(jEntry, g_mid_MapEntry_getValue);
\r
120 if (!jValue) return;
\r
122 map.insert(std::make_pair(env->GetStringUTFChars(jKey, NULL),
\r
123 env->GetStringUTFChars(jValue, NULL)));
\r
125 if (env->ExceptionCheck()) return;
\r
126 env->DeleteLocalRef(jEntry);
\r
127 env->DeleteLocalRef(jKey);
\r
128 env->DeleteLocalRef(jValue);
\r
132 jobject JniUtils::convertQueryParamsMapToJavaMap(JNIEnv *env, const OC::QueryParamsMap &map)
\r
134 jobject hashMap = env->NewObject(g_cls_HashMap, g_mid_HashMap_ctor);
\r
135 if (!hashMap) return nullptr;
\r
137 for (auto it = map.begin(); it != map.end(); ++it)
\r
139 std::string key = it->first;
\r
140 std::string value = it->second;
\r
142 env->CallObjectMethod(hashMap,
\r
144 env->NewStringUTF(key.c_str()),
\r
145 env->NewStringUTF(value.c_str()));
\r
146 if (env->ExceptionCheck()) return nullptr;
\r
152 void JniUtils::convertJavaRepresentationArrToVector(JNIEnv *env,
\r
153 jobjectArray jRepresentationArray,
\r
154 std::vector<OC::OCRepresentation>& representationVector)
\r
156 if (!jRepresentationArray) return;
\r
157 jsize len = env->GetArrayLength(jRepresentationArray);
\r
159 for (jsize i = 0; i < len; ++i)
\r
161 jobject jRep = env->GetObjectArrayElement(jRepresentationArray, i);
\r
163 OC::OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, jRep);
\r
164 representationVector.push_back(*rep);
\r
165 if (env->ExceptionCheck()) return;
\r
166 env->DeleteLocalRef(jRep);
\r
170 jobjectArray JniUtils::convertRepresentationVectorToJavaArray(JNIEnv *env,
\r
171 const std::vector<OC::OCRepresentation>& representationVector)
\r
173 jsize len = static_cast<jsize>(representationVector.size());
\r
174 jobjectArray repArr = env->NewObjectArray(len, g_cls_OcRepresentation, NULL);
\r
175 if (!repArr) return nullptr;
\r
176 for (jsize i = 0; i < len; ++i)
\r
178 OCRepresentation* rep = new OCRepresentation(representationVector[i]);
\r
179 jlong handle = reinterpret_cast<jlong>(rep);
\r
180 jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,
\r
182 if (!jRepresentation)
\r
187 env->SetObjectArrayElement(repArr, i, jRepresentation);
\r
188 if (env->ExceptionCheck()) return nullptr;
\r
189 env->DeleteLocalRef(jRepresentation);
\r