Imported Upstream version 0.9.1
[platform/upstream/iotivity.git] / android / android_api / base / jni / JniOcRepresentation.cpp
1 /*\r
2 * //******************************************************************\r
3 * //\r
4 * // Copyright 2015 Intel Corporation.\r
5 * //\r
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
7 * //\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
11 * //\r
12 * //      http://www.apache.org/licenses/LICENSE-2.0\r
13 * //\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
19 * //\r
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
21 */\r
22 #include "JniOcRepresentation.h"\r
23 #include "JniUtils.h"\r
24 \r
25 using namespace OC;\r
26 \r
27 OCRepresentation* JniOcRepresentation::getOCRepresentationPtr(JNIEnv *env, jobject thiz)\r
28 {\r
29     OCRepresentation *rep = GetHandle<OCRepresentation>(env, thiz);\r
30     if (env->ExceptionCheck())\r
31     {\r
32         LOGE("Failed to get native handle from OcRepresentation");\r
33     }\r
34     if (!rep)\r
35     {\r
36         ThrowOcException(JNI_NO_NATIVE_POINTER, "");\r
37     }\r
38     return rep;\r
39 }\r
40 \r
41 /*\r
42 * Class:     org_iotivity_base_OcRepresentation\r
43 * Method:    getValueN\r
44 * Signature: (Ljava/lang/String;)Ljava/lang/Object;\r
45 */\r
46 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcRepresentation_getValueN\r
47 (JNIEnv *env, jobject thiz, jstring jKey)\r
48 {\r
49     LOGD("OcRepresentation_getValue");\r
50     if (!jKey)\r
51     {\r
52         ThrowOcException(OC_STACK_INVALID_PARAM, "attributeKey cannot be null");\r
53         return nullptr;\r
54     }\r
55     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
56     if (!rep) return nullptr;\r
57 \r
58     std::string key = env->GetStringUTFChars(jKey, NULL);\r
59 \r
60     AttributeValue attrValue;\r
61     if (!rep->getAttributeValue(key.c_str(), attrValue))\r
62     {\r
63         ThrowOcException(JNI_NO_SUCH_KEY, " attribute key does not exist");\r
64         return nullptr;\r
65     }\r
66     return boost::apply_visitor(JObjectConverter(env), attrValue);\r
67 }\r
68 \r
69 /*\r
70 * Class:     org_iotivity_base_OcRepresentation\r
71 * Method:    setValueInteger\r
72 * Signature: (Ljava/lang/String;I)V\r
73 */\r
74 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueInteger\r
75 (JNIEnv *env, jobject thiz, jstring jKey, jint jValue)\r
76 {\r
77     LOGD("OcRepresentation_setValueInteger");\r
78     if (!jKey)\r
79     {\r
80         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
81         return;\r
82     }\r
83     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
84     if (!rep) return;\r
85 \r
86     std::string str = env->GetStringUTFChars(jKey, NULL);\r
87     rep->setValue(str, static_cast<int>(jValue));\r
88 }\r
89 \r
90 /*\r
91 * Class:     org_iotivity_base_OcRepresentation\r
92 * Method:    setValueDouble\r
93 * Signature: (Ljava/lang/String;D)V\r
94 */\r
95 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueDouble\r
96 (JNIEnv *env, jobject thiz, jstring jKey, jdouble jValue)\r
97 {\r
98     LOGD("OcRepresentation_setValueDouble");\r
99     if (!jKey)\r
100     {\r
101         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
102         return;\r
103     }\r
104     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
105     if (!rep) return;\r
106 \r
107     std::string str = env->GetStringUTFChars(jKey, NULL);\r
108     rep->setValue(str, static_cast<double>(jValue));\r
109 }\r
110 \r
111 /*\r
112 * Class:     org_iotivity_base_OcRepresentation\r
113 * Method:    setValueBoolean\r
114 * Signature: (Ljava/lang/String;Z)V\r
115 */\r
116 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueBoolean\r
117 (JNIEnv *env, jobject thiz, jstring jKey, jboolean jValue)\r
118 {\r
119     LOGD("OcRepresentation_setValueBoolean");\r
120     if (!jKey)\r
121     {\r
122         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
123         return;\r
124     }\r
125     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
126     if (!rep) return;\r
127 \r
128     std::string str = env->GetStringUTFChars(jKey, NULL);\r
129     rep->setValue(str, static_cast<bool>(jValue));\r
130 }\r
131 \r
132 /*\r
133 * Class:     org_iotivity_base_OcRepresentation\r
134 * Method:    setValueStringN\r
135 * Signature: (Ljava/lang/String;Ljava/lang/String;)V\r
136 */\r
137 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueStringN\r
138 (JNIEnv *env, jobject thiz, jstring jKey, jstring jValue)\r
139 {\r
140     LOGD("OcRepresentation_setValueString");\r
141     if (!jKey)\r
142     {\r
143         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
144         return;\r
145     }\r
146     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
147     if (!rep) return;\r
148 \r
149     std::string key = env->GetStringUTFChars(jKey, NULL);\r
150     std::string value = env->GetStringUTFChars(jValue, NULL);\r
151 \r
152     rep->setValue(key, value);\r
153 }\r
154 \r
155 /*\r
156 * Class:     org_iotivity_base_OcRepresentation\r
157 * Method:    setValueRepresentation\r
158 * Signature: (Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;)V\r
159 */\r
160 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueRepresentation\r
161 (JNIEnv *env, jobject thiz, jstring jKey, jobject jValue)\r
162 {\r
163     LOGD("OcRepresentation_setValueRepresentation");\r
164     if (!jKey)\r
165     {\r
166         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
167         return;\r
168     }\r
169     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
170     if (!rep) return;\r
171 \r
172     std::string key = env->GetStringUTFChars(jKey, NULL);\r
173     OCRepresentation *value = JniOcRepresentation::getOCRepresentationPtr(env, jValue);\r
174     if (!value) return;\r
175 \r
176     rep->setValue(key, *value);\r
177 }\r
178 \r
179 /*\r
180 * Class:     org_iotivity_base_OcRepresentation\r
181 * Method:    setValueIntegerArray\r
182 * Signature: (Ljava/lang/String;[I)V\r
183 */\r
184 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueIntegerArray\r
185 (JNIEnv *env, jobject thiz, jstring jKey, jintArray jValue)\r
186 {\r
187     LOGD("OcRepresentation_setValueIntegerArray");\r
188     if (!jKey)\r
189     {\r
190         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
191         return;\r
192     }\r
193 \r
194     const jsize len = env->GetArrayLength(jValue);\r
195     jint* ints = env->GetIntArrayElements(jValue, NULL);\r
196 \r
197     std::vector<int> value;\r
198     for (jsize i = 0; i < len; ++i)\r
199     {\r
200         value.push_back(static_cast<int>(ints[i]));\r
201     }\r
202     env->ReleaseIntArrayElements(jValue, ints, JNI_ABORT);\r
203 \r
204     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
205     if (!rep) return;\r
206 \r
207     std::string key = env->GetStringUTFChars(jKey, NULL);\r
208     rep->setValue(key, value);\r
209 }\r
210 \r
211 /*\r
212 * Class:     org_iotivity_base_OcRepresentation\r
213 * Method:    setValueInteger2DArray\r
214 * Signature: (Ljava/lang/String;[[I)V\r
215 */\r
216 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueInteger2DArray\r
217 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
218 {\r
219     LOGD("OcRepresentation__setValueInteger2DArray");\r
220     if (!jKey)\r
221     {\r
222         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
223         return;\r
224     }\r
225     std::vector<std::vector<int>> value;\r
226     const jsize lenOuter = env->GetArrayLength(jValue);\r
227     for (jsize j = 0; j < lenOuter; ++j)\r
228     {\r
229         jintArray jInnerArray = static_cast<jintArray>(env->GetObjectArrayElement(jValue, j));\r
230         jint* ints = env->GetIntArrayElements(jInnerArray, NULL);\r
231         std::vector<int> innerVector;\r
232         const jsize lenInner = env->GetArrayLength(jInnerArray);\r
233         for (jsize i = 0; i < lenInner; ++i)\r
234         {\r
235             innerVector.push_back(static_cast<int>(ints[i]));\r
236         }\r
237         env->ReleaseIntArrayElements(jInnerArray, ints, JNI_ABORT);\r
238         env->DeleteLocalRef(jInnerArray);\r
239         value.push_back(innerVector);\r
240     }\r
241 \r
242     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
243     if (!rep) return;\r
244 \r
245     std::string key = env->GetStringUTFChars(jKey, NULL);\r
246     rep->setValue(key, value);\r
247 }\r
248 \r
249 /*\r
250 * Class:     org_iotivity_base_OcRepresentation\r
251 * Method:    setValueInteger3DArray\r
252 * Signature: (Ljava/lang/String;[[[I)V\r
253 */\r
254 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueInteger3DArray\r
255 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
256 {\r
257     LOGD("OcRepresentation_setValueInteger3DArray");\r
258     if (!jKey)\r
259     {\r
260         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
261         return;\r
262     }\r
263     std::vector<std::vector<std::vector<int>>> value;\r
264     const jsize lenOuter = env->GetArrayLength(jValue);\r
265     for (jsize k = 0; k < lenOuter; ++k)\r
266     {\r
267         jobjectArray jMiddleArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jValue, k));\r
268         const jsize lenMiddle = env->GetArrayLength(jMiddleArray);\r
269         std::vector<std::vector<int>> middleArray;\r
270         for (jsize j = 0; j < lenMiddle; ++j)\r
271         {\r
272             jintArray jInnerArray = static_cast<jintArray>(env->GetObjectArrayElement(jMiddleArray, j));\r
273             jint* ints = env->GetIntArrayElements(jInnerArray, NULL);\r
274             std::vector<int> innerVector;\r
275             const jsize lenInner = env->GetArrayLength(jInnerArray);\r
276             for (jsize i = 0; i < lenInner; ++i)\r
277             {\r
278                 innerVector.push_back(static_cast<int>(ints[i]));\r
279             }\r
280             env->ReleaseIntArrayElements(jInnerArray, ints, JNI_ABORT);\r
281             env->DeleteLocalRef(jInnerArray);\r
282             middleArray.push_back(innerVector);\r
283         }\r
284         env->DeleteLocalRef(jMiddleArray);\r
285         value.push_back(middleArray);\r
286     }\r
287 \r
288     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
289     if (!rep) return;\r
290 \r
291     std::string key = env->GetStringUTFChars(jKey, NULL);\r
292     rep->setValue(key, value);\r
293 }\r
294 \r
295 /*\r
296 * Class:     org_iotivity_base_OcRepresentation\r
297 * Method:    setValueDoubleArray\r
298 * Signature: (Ljava/lang/String;[D)V\r
299 */\r
300 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueDoubleArray\r
301 (JNIEnv *env, jobject thiz, jstring jKey, jdoubleArray jValue)\r
302 {\r
303     LOGD("OcRepresentation_setValueDoubleArray");\r
304     if (!jKey)\r
305     {\r
306         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
307         return;\r
308     }\r
309 \r
310     const jsize len = env->GetArrayLength(jValue);\r
311     jdouble* doubles = env->GetDoubleArrayElements(jValue, NULL);\r
312 \r
313     std::vector<double> value;\r
314     for (jsize i = 0; i < len; ++i)\r
315     {\r
316         value.push_back(static_cast<double>(doubles[i]));\r
317     }\r
318     env->ReleaseDoubleArrayElements(jValue, doubles, JNI_ABORT);\r
319 \r
320     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
321     if (!rep) return;\r
322 \r
323     std::string key = env->GetStringUTFChars(jKey, NULL);\r
324     rep->setValue(key, value);\r
325 }\r
326 \r
327 /*\r
328 * Class:     org_iotivity_base_OcRepresentation\r
329 * Method:    setValueDouble2DArray\r
330 * Signature: (Ljava/lang/String;[[D)V\r
331 */\r
332 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueDouble2DArray\r
333 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
334 {\r
335     LOGD("OcRepresentation_setValueDouble2DArray");\r
336     if (!jKey)\r
337     {\r
338         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
339         return;\r
340     }\r
341     std::vector<std::vector<double>> value;\r
342     const jsize lenOuter = env->GetArrayLength(jValue);\r
343     for (jsize j = 0; j < lenOuter; ++j)\r
344     {\r
345         jdoubleArray jInnerArray = static_cast<jdoubleArray>(env->GetObjectArrayElement(jValue, j));\r
346         jdouble* doubles = env->GetDoubleArrayElements(jInnerArray, NULL);\r
347         std::vector<double> innerVector;\r
348         const jsize lenInner = env->GetArrayLength(jInnerArray);\r
349         for (jsize i = 0; i < lenInner; ++i)\r
350         {\r
351             innerVector.push_back(static_cast<double>(doubles[i]));\r
352         }\r
353         env->ReleaseDoubleArrayElements(jInnerArray, doubles, JNI_ABORT);\r
354         env->DeleteLocalRef(jInnerArray);\r
355         value.push_back(innerVector);\r
356     }\r
357 \r
358     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
359     if (!rep) return;\r
360 \r
361     std::string key = env->GetStringUTFChars(jKey, NULL);\r
362     rep->setValue(key, value);\r
363 }\r
364 \r
365 /*\r
366 * Class:     org_iotivity_base_OcRepresentation\r
367 * Method:    setValueDouble3DArray\r
368 * Signature: (Ljava/lang/String;[[[D)V\r
369 */\r
370 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueDouble3DArray\r
371 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
372 {\r
373     LOGD("OcRepresentation_setValueDouble3DArray");\r
374     if (!jKey)\r
375     {\r
376         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
377         return;\r
378     }\r
379     std::vector<std::vector<std::vector<double>>> value;\r
380     const jsize lenOuter = env->GetArrayLength(jValue);\r
381     for (jsize k = 0; k < lenOuter; ++k)\r
382     {\r
383         jobjectArray jMiddleArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jValue, k));\r
384         const jsize lenMiddle = env->GetArrayLength(jMiddleArray);\r
385         std::vector<std::vector<double>> middleArray;\r
386         for (jsize j = 0; j < lenMiddle; ++j)\r
387         {\r
388             jdoubleArray jInnerArray = static_cast<jdoubleArray>(env->GetObjectArrayElement(jMiddleArray, j));\r
389             jdouble* doubles = env->GetDoubleArrayElements(jInnerArray, NULL);\r
390             std::vector<double> innerVector;\r
391             const jsize lenInner = env->GetArrayLength(jInnerArray);\r
392             for (jsize i = 0; i < lenInner; ++i)\r
393             {\r
394                 innerVector.push_back(static_cast<double>(doubles[i]));\r
395             }\r
396             env->ReleaseDoubleArrayElements(jInnerArray, doubles, JNI_ABORT);\r
397             env->DeleteLocalRef(jInnerArray);\r
398             middleArray.push_back(innerVector);\r
399         }\r
400         env->DeleteLocalRef(jMiddleArray);\r
401         value.push_back(middleArray);\r
402     }\r
403 \r
404     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
405     if (!rep) return;\r
406 \r
407     std::string key = env->GetStringUTFChars(jKey, NULL);\r
408     rep->setValue(key, value);\r
409 }\r
410 \r
411 /*\r
412 * Class:     org_iotivity_base_OcRepresentation\r
413 * Method:    setValueBooleanArray\r
414 * Signature: (Ljava/lang/String;[Z)V\r
415 */\r
416 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueBooleanArray\r
417 (JNIEnv *env, jobject thiz, jstring jKey, jbooleanArray jValue)\r
418 {\r
419     LOGD("OcRepresentation_setValueBooleanArray");\r
420     if (!jKey)\r
421     {\r
422         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
423         return;\r
424     }\r
425 \r
426     const jsize len = env->GetArrayLength(jValue);\r
427     jboolean* booleans = env->GetBooleanArrayElements(jValue, NULL);\r
428 \r
429     std::vector<bool> value;\r
430     for (jsize i = 0; i < len; ++i)\r
431     {\r
432         value.push_back(static_cast<bool>(booleans[i]));\r
433     }\r
434     env->ReleaseBooleanArrayElements(jValue, booleans, JNI_ABORT);\r
435 \r
436     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
437     if (!rep) return;\r
438 \r
439     std::string key = env->GetStringUTFChars(jKey, NULL);\r
440     rep->setValue(key, value);\r
441 }\r
442 \r
443 /*\r
444 * Class:     org_iotivity_base_OcRepresentation\r
445 * Method:    setValueBoolean2DArray\r
446 * Signature: (Ljava/lang/String;[[Z)V\r
447 */\r
448 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueBoolean2DArray\r
449 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
450 {\r
451     LOGD("OcRepresentation_setValueBoolean2DArray");\r
452     if (!jKey)\r
453     {\r
454         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
455         return;\r
456     }\r
457     std::vector<std::vector<bool>> value;\r
458     const jsize lenOuter = env->GetArrayLength(jValue);\r
459     for (jsize j = 0; j < lenOuter; ++j)\r
460     {\r
461         jbooleanArray jInnerArray = static_cast<jbooleanArray>(env->GetObjectArrayElement(jValue, j));\r
462         const jsize lenInner = env->GetArrayLength(jInnerArray);\r
463         jboolean* booleans = env->GetBooleanArrayElements(jInnerArray, NULL);\r
464 \r
465         std::vector<bool> innerVector;\r
466         for (jsize i = 0; i < lenInner; ++i)\r
467         {\r
468             innerVector.push_back(static_cast<bool>(booleans[i]));\r
469         }\r
470         env->ReleaseBooleanArrayElements(jInnerArray, booleans, JNI_ABORT);\r
471         env->DeleteLocalRef(jInnerArray);\r
472         value.push_back(innerVector);\r
473     }\r
474 \r
475     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
476     if (!rep) return;\r
477 \r
478     std::string key = env->GetStringUTFChars(jKey, NULL);\r
479     rep->setValue(key, value);\r
480 }\r
481 \r
482 /*\r
483 * Class:     org_iotivity_base_OcRepresentation\r
484 * Method:    setValueBoolean3DArray\r
485 * Signature: (Ljava/lang/String;[[[Z)V\r
486 */\r
487 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueBoolean3DArray\r
488 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
489 {\r
490     LOGD("OcRepresentation_setValueBoolean3DArray");\r
491     if (!jKey)\r
492     {\r
493         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
494         return;\r
495     }\r
496     std::vector<std::vector<std::vector<bool>>> value;\r
497     const jsize lenOuter = env->GetArrayLength(jValue);\r
498     for (jsize k = 0; k < lenOuter; ++k)\r
499     {\r
500         jobjectArray jMiddleArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jValue, k));\r
501         const jsize lenMiddle = env->GetArrayLength(jMiddleArray);\r
502         std::vector<std::vector<bool>> middleArray;\r
503         for (jsize j = 0; j < lenMiddle; ++j)\r
504         {\r
505             jbooleanArray jInnerArray = static_cast<jbooleanArray>(env->GetObjectArrayElement(jMiddleArray, j));\r
506             const jsize lenInner = env->GetArrayLength(jInnerArray);\r
507             jboolean* booleans = env->GetBooleanArrayElements(jInnerArray, NULL);\r
508 \r
509             std::vector<bool> innerVector;\r
510             for (jsize i = 0; i < lenInner; ++i)\r
511             {\r
512                 innerVector.push_back(static_cast<bool>(booleans[i]));\r
513             }\r
514             env->ReleaseBooleanArrayElements(jInnerArray, booleans, JNI_ABORT);\r
515             env->DeleteLocalRef(jInnerArray);\r
516             middleArray.push_back(innerVector);\r
517         }\r
518         env->DeleteLocalRef(jMiddleArray);\r
519         value.push_back(middleArray);\r
520     }\r
521 \r
522     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
523     if (!rep) return;\r
524 \r
525     std::string key = env->GetStringUTFChars(jKey, NULL);\r
526     rep->setValue(key, value);\r
527 }\r
528 \r
529 /*\r
530 * Class:     org_iotivity_base_OcRepresentation\r
531 * Method:    setValueStringArray\r
532 * Signature: (Ljava/lang/String;[Ljava/lang/String;)V\r
533 */\r
534 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueStringArray\r
535 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
536 {\r
537     LOGD("OcRepresentation_setValueStringArray");\r
538     if (!jKey)\r
539     {\r
540         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
541         return;\r
542     }\r
543 \r
544     std::vector<std::string> value;\r
545     JniUtils::convertJavaStrArrToStrVector(env, jValue, value);\r
546 \r
547     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
548     if (!rep) return;\r
549 \r
550     std::string key = env->GetStringUTFChars(jKey, NULL);\r
551     rep->setValue(key, value);\r
552 }\r
553 \r
554 /*\r
555 * Class:     org_iotivity_base_OcRepresentation\r
556 * Method:    setValueString2DArray\r
557 * Signature: (Ljava/lang/String;[[Ljava/lang/String;)V\r
558 */\r
559 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueString2DArray\r
560 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
561 {\r
562     LOGD("OcRepresentation_setValueString2DArray");\r
563     if (!jKey)\r
564     {\r
565         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
566         return;\r
567     }\r
568     std::vector<std::vector<std::string>> value;\r
569     const jsize lenOuter = env->GetArrayLength(jValue);\r
570     for (jsize j = 0; j < lenOuter; ++j)\r
571     {\r
572         jobjectArray jInnerArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jValue, j));\r
573         std::vector<std::string> innerVector;\r
574         JniUtils::convertJavaStrArrToStrVector(env, jInnerArray, innerVector);\r
575         env->DeleteLocalRef(jInnerArray);\r
576         value.push_back(innerVector);\r
577     }\r
578 \r
579     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
580     if (!rep) return;\r
581 \r
582     std::string key = env->GetStringUTFChars(jKey, NULL);\r
583     rep->setValue(key, value);\r
584 }\r
585 \r
586 /*\r
587 * Class:     org_iotivity_base_OcRepresentation\r
588 * Method:    setValueString3DArray\r
589 * Signature: (Ljava/lang/String;[[[Ljava/lang/String;)V\r
590 */\r
591 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueString3DArray\r
592 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
593 {\r
594     LOGD("OcRepresentation_setValueString3DArray");\r
595     if (!jKey)\r
596     {\r
597         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
598         return;\r
599     }\r
600     std::vector<std::vector<std::vector<std::string>>> value;\r
601     const jsize lenOuter = env->GetArrayLength(jValue);\r
602     for (jsize k = 0; k < lenOuter; ++k)\r
603     {\r
604         jobjectArray jMiddleArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jValue, k));\r
605         const jsize lenMiddle = env->GetArrayLength(jMiddleArray);\r
606         std::vector<std::vector<std::string>> middleArray;\r
607         for (jsize j = 0; j < lenMiddle; ++j)\r
608         {\r
609             jobjectArray jInnerArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jMiddleArray, j));\r
610             std::vector<std::string> innerVector;\r
611             JniUtils::convertJavaStrArrToStrVector(env, jInnerArray, innerVector);\r
612             env->DeleteLocalRef(jInnerArray);\r
613             middleArray.push_back(innerVector);\r
614         }\r
615         env->DeleteLocalRef(jMiddleArray);\r
616         value.push_back(middleArray);\r
617     }\r
618 \r
619     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
620     if (!rep) return;\r
621 \r
622     std::string key = env->GetStringUTFChars(jKey, NULL);\r
623     rep->setValue(key, value);\r
624 }\r
625 \r
626 /*\r
627 * Class:     org_iotivity_base_OcRepresentation\r
628 * Method:    setValueRepresentationArray\r
629 * Signature: (Ljava/lang/String;[Lorg/iotivity/base/OcRepresentation;)V\r
630 */\r
631 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueRepresentationArray\r
632 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
633 {\r
634     LOGD("OcRepresentation_setValueRepresentationArray");\r
635     if (!jKey)\r
636     {\r
637         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
638         return;\r
639     }\r
640 \r
641     std::vector<OCRepresentation> value;\r
642     JniUtils::convertJavaRepresentationArrToVector(env, jValue, value);\r
643 \r
644     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
645     if (!rep) return;\r
646 \r
647     std::string key = env->GetStringUTFChars(jKey, NULL);\r
648     rep->setValue(key, value);\r
649 }\r
650 \r
651 /*\r
652 * Class:     org_iotivity_base_OcRepresentation\r
653 * Method:    setValueRepresentation2DArray\r
654 * Signature: (Ljava/lang/String;[[Lorg/iotivity/base/OcRepresentation;)V\r
655 */\r
656 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueRepresentation2DArray\r
657 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
658 {\r
659     LOGD("OcRepresentation_setValueRepresentation2DArray");\r
660     if (!jKey)\r
661     {\r
662         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
663         return;\r
664     }\r
665     std::vector<std::vector<OCRepresentation>> value;\r
666     const jsize lenOuter = env->GetArrayLength(jValue);\r
667     for (jsize j = 0; j < lenOuter; ++j)\r
668     {\r
669         jobjectArray jInnerArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jValue, j));\r
670         std::vector<OCRepresentation> innerVector;\r
671         JniUtils::convertJavaRepresentationArrToVector(env, jInnerArray, innerVector);\r
672         env->DeleteLocalRef(jInnerArray);\r
673         value.push_back(innerVector);\r
674     }\r
675 \r
676     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
677     if (!rep) return;\r
678 \r
679     std::string key = env->GetStringUTFChars(jKey, NULL);\r
680     rep->setValue(key, value);\r
681 }\r
682 \r
683 /*\r
684 * Class:     org_iotivity_base_OcRepresentation\r
685 * Method:    setValueRepresentation3DArray\r
686 * Signature: (Ljava/lang/String;[[[Lorg/iotivity/base/OcRepresentation;)V\r
687 */\r
688 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setValueRepresentation3DArray\r
689 (JNIEnv *env, jobject thiz, jstring jKey, jobjectArray jValue)\r
690 {\r
691     LOGD("OcRepresentation_setValueRepresentation3DArray");\r
692     if (!jKey)\r
693     {\r
694         ThrowOcException(OC_STACK_INVALID_PARAM, "key cannot be null");\r
695         return;\r
696     }\r
697     std::vector<std::vector<std::vector<OCRepresentation>>> value;\r
698     const jsize lenOuter = env->GetArrayLength(jValue);\r
699     for (jsize k = 0; k < lenOuter; ++k)\r
700     {\r
701         jobjectArray jMiddleArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jValue, k));\r
702         const jsize lenMiddle = env->GetArrayLength(jMiddleArray);\r
703         std::vector<std::vector<OCRepresentation>> middleArray;\r
704         for (jsize j = 0; j < lenMiddle; ++j)\r
705         {\r
706             jobjectArray jInnerArray = static_cast<jobjectArray>(env->GetObjectArrayElement(jMiddleArray, j));\r
707             std::vector<OCRepresentation> innerVector;\r
708             JniUtils::convertJavaRepresentationArrToVector(env, jInnerArray, innerVector);\r
709             env->DeleteLocalRef(jInnerArray);\r
710             middleArray.push_back(innerVector);\r
711         }\r
712         env->DeleteLocalRef(jMiddleArray);\r
713         value.push_back(middleArray);\r
714     }\r
715 \r
716     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
717     if (!rep) return;\r
718 \r
719     std::string key = env->GetStringUTFChars(jKey, NULL);\r
720     rep->setValue(key, value);\r
721 }\r
722 \r
723 /*\r
724 * Class:     org_iotivity_base_OcRepresentation\r
725 * Method:    getJSONRepresentation\r
726 * Signature: ()Ljava/lang/String;\r
727 */\r
728 JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcRepresentation_getJSONRepresentation\r
729 (JNIEnv *env, jobject thiz)\r
730 {\r
731     LOGD("OcRepresentation_getJSONRepresentation");\r
732     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
733     if (!rep) return nullptr;\r
734 \r
735     std::string jsonStr = rep->getJSONRepresentation();\r
736     return env->NewStringUTF(jsonStr.c_str());\r
737 }\r
738 \r
739 /*\r
740 * Class:     org_iotivity_base_OcRepresentation\r
741 * Method:    addChild\r
742 * Signature: (Lorg/iotivity/base/OcRepresentation;)V\r
743 */\r
744 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_addChild\r
745 (JNIEnv *env, jobject thiz, jobject jOcRepresentation)\r
746 {\r
747     LOGD("OcRepresentation_addChild");\r
748     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
749     if (!rep) return;\r
750 \r
751     OCRepresentation *child = JniOcRepresentation::getOCRepresentationPtr(env, jOcRepresentation);\r
752     if (!child) return;\r
753 \r
754     rep->addChild(*child);\r
755 }\r
756 \r
757 /*\r
758 * Class:     org_iotivity_base_OcRepresentation\r
759 * Method:    clearChildren\r
760 * Signature: ()V\r
761 */\r
762 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_clearChildren\r
763 (JNIEnv *env, jobject thiz)\r
764 {\r
765     LOGD("OcRepresentation_clearChildren");\r
766     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
767     if (!rep) return;\r
768 \r
769     rep->clearChildren();\r
770 }\r
771 \r
772 /*\r
773 * Class:     org_iotivity_base_OcRepresentation\r
774 * Method:    getChildrenArray\r
775 * Signature: ()[Lorg/iotivity/base/OcRepresentation;\r
776 */\r
777 JNIEXPORT jobjectArray JNICALL Java_org_iotivity_base_OcRepresentation_getChildrenArray\r
778 (JNIEnv *env, jobject thiz)\r
779 {\r
780     LOGD("OcRepresentation_getChildrenArray");\r
781     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
782     if (!rep) return nullptr;\r
783 \r
784     return JniUtils::convertRepresentationVectorToJavaArray(env, rep->getChildren());\r
785 }\r
786 \r
787 /*\r
788 * Class:     org_iotivity_base_OcRepresentation\r
789 * Method:    getUri\r
790 * Signature: ()Ljava/lang/String;\r
791 */\r
792 JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcRepresentation_getUri\r
793 (JNIEnv *env, jobject thiz)\r
794 {\r
795     LOGD("OcRepresentation_getUri");\r
796     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
797     if (!rep) return nullptr;\r
798 \r
799     std::string uri(rep->getUri());\r
800     return env->NewStringUTF(uri.c_str());\r
801 }\r
802 \r
803 /*\r
804 * Class:     org_iotivity_base_OcRepresentation\r
805 * Method:    setUri\r
806 * Signature: (Ljava/lang/String;)V\r
807 */\r
808 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setUri\r
809 (JNIEnv *env, jobject thiz, jstring jUri)\r
810 {\r
811     LOGD("OcRepresentation_setUri");\r
812     if (!jUri)\r
813     {\r
814         ThrowOcException(OC_STACK_INVALID_PARAM, "uri cannot be null");\r
815         return;\r
816     }\r
817     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
818     if (!rep) return;\r
819 \r
820     rep->setUri(env->GetStringUTFChars(jUri, NULL));\r
821 }\r
822 \r
823 JNIEXPORT jboolean JNICALL Java_org_iotivity_base_OcRepresentation_hasAttribute\r
824 (JNIEnv *env, jobject thiz, jstring jstr)\r
825 {\r
826     LOGD("OcRepresentation_hasAttribute");\r
827     if (!jstr)\r
828     {\r
829         ThrowOcException(OC_STACK_INVALID_PARAM, "attributeKey cannot be null");\r
830         return false;\r
831     }\r
832     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
833     if (!rep) return false;\r
834 \r
835     std::string str = env->GetStringUTFChars(jstr, NULL);\r
836     return rep->hasAttribute(str);\r
837 }\r
838 \r
839 /*\r
840 * Class:     org_iotivity_base_OcRepresentation\r
841 * Method:    getResourceTypes\r
842 * Signature: ()Ljava/util/List;\r
843 */\r
844 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcRepresentation_getResourceTypes\r
845 (JNIEnv *env, jobject thiz)\r
846 {\r
847     LOGD("OcRepresentation_getResourceTypes");\r
848     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
849     if (!rep) return nullptr;\r
850 \r
851     std::vector<std::string> resourceTypes = rep->getResourceTypes();\r
852     return JniUtils::convertStrVectorToJavaStrList(env, resourceTypes);\r
853 }\r
854 \r
855 /*\r
856 * Class:     org_iotivity_base_OcRepresentation\r
857 * Method:    setResourceTypeArray\r
858 * Signature: ([Ljava/lang/String;)V\r
859 */\r
860 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setResourceTypeArray\r
861 (JNIEnv *env, jobject thiz, jobjectArray jResourceTypeArray)\r
862 {\r
863     LOGD("OcRepresentation_setResourceTypeArray");\r
864     if (!jResourceTypeArray)\r
865     {\r
866         ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");\r
867         return;\r
868     }\r
869     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
870     if (!rep) return;\r
871 \r
872     std::vector<std::string> resourceTypes;\r
873     JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);\r
874     rep->setResourceTypes(resourceTypes);\r
875 }\r
876 /*\r
877 * Class:     org_iotivity_base_OcRepresentation\r
878 * Method:    getResourceInterfaces\r
879 * Signature: ()Ljava/util/List;\r
880 */\r
881 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcRepresentation_getResourceInterfaces\r
882 (JNIEnv *env, jobject thiz)\r
883 {\r
884     LOGD("OcRepresentation_getResourceInterfaces");\r
885     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
886     if (!rep) return nullptr;\r
887 \r
888     std::vector<std::string> resourceInterfaces = rep->getResourceInterfaces();\r
889     return JniUtils::convertStrVectorToJavaStrList(env, resourceInterfaces);\r
890 }\r
891 \r
892 /*\r
893 * Class:     org_iotivity_base_OcRepresentation\r
894 * Method:    setResourceInterfaceArray\r
895 * Signature: ([Ljava/lang/String;)V\r
896 */\r
897 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setResourceInterfaceArray\r
898 (JNIEnv *env, jobject thiz, jobjectArray jResourceInterfaceArray)\r
899 {\r
900     LOGD("OcRepresentation_setResourceInterfaceArray");\r
901     if (!jResourceInterfaceArray)\r
902     {\r
903         ThrowOcException(OC_STACK_INVALID_PARAM, "resourceInterfaceList cannot be null");\r
904         return;\r
905     }\r
906     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
907     if (!rep) return;\r
908 \r
909     std::vector<std::string> resourceInterfaces;\r
910     JniUtils::convertJavaStrArrToStrVector(env, jResourceInterfaceArray, resourceInterfaces);\r
911     rep->setResourceInterfaces(resourceInterfaces);\r
912 }\r
913 \r
914 /*\r
915 * Class:     org_iotivity_base_OcRepresentation\r
916 * Method:    isEmpty\r
917 * Signature: ()Z\r
918 */\r
919 JNIEXPORT jboolean JNICALL Java_org_iotivity_base_OcRepresentation_isEmpty\r
920 (JNIEnv *env, jobject thiz)\r
921 {\r
922     LOGD("OcRepresentation_isEmpty");\r
923     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
924     if (!rep) return false;\r
925 \r
926     return static_cast<jboolean>(rep->empty());\r
927 }\r
928 \r
929 /*\r
930 * Class:     org_iotivity_base_OcRepresentation\r
931 * Method:    size\r
932 * Signature: ()I\r
933 */\r
934 JNIEXPORT jint JNICALL Java_org_iotivity_base_OcRepresentation_size\r
935 (JNIEnv *env, jobject thiz)\r
936 {\r
937     LOGD("OcRepresentation_size");\r
938     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
939     if (!rep) return -1;\r
940 \r
941     return static_cast<jint>(rep->numberOfAttributes());\r
942 }\r
943 \r
944 /*\r
945 * Class:     org_iotivity_base_OcRepresentation\r
946 * Method:    remove\r
947 * Signature: (Ljava/lang/String;)Z\r
948 */\r
949 JNIEXPORT jboolean JNICALL Java_org_iotivity_base_OcRepresentation_remove\r
950 (JNIEnv *env, jobject thiz, jstring jAttributeKey)\r
951 {\r
952     LOGD("OcRepresentation_remove");\r
953     if (!jAttributeKey)\r
954     {\r
955         ThrowOcException(OC_STACK_INVALID_PARAM, "attributeKey cannot be null");\r
956         return false;\r
957     }\r
958     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
959     if (!rep) return false;\r
960 \r
961     std::string attributeKey = env->GetStringUTFChars(jAttributeKey, NULL);\r
962     return static_cast<jboolean>(rep->erase(attributeKey));\r
963 }\r
964 \r
965 /*\r
966 * Class:     org_iotivity_base_OcRepresentation\r
967 * Method:    setNull\r
968 * Signature: (Ljava/lang/String;)V\r
969 */\r
970 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_setNull\r
971 (JNIEnv *env, jobject thiz, jstring jAttributeKey)\r
972 {\r
973     LOGD("OcRepresentation_setNull");\r
974     if (!jAttributeKey)\r
975     {\r
976         ThrowOcException(OC_STACK_INVALID_PARAM, "attributeKey cannot be null");\r
977         return;\r
978     }\r
979     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
980     if (!rep) return;\r
981 \r
982     std::string attributeKey = env->GetStringUTFChars(jAttributeKey, NULL);\r
983     rep->setNULL(attributeKey);\r
984 }\r
985 \r
986 /*\r
987 * Class:     org_iotivity_base_OcRepresentation\r
988 * Method:    isNull\r
989 * Signature: (Ljava/lang/String;)Z\r
990 */\r
991 JNIEXPORT jboolean JNICALL Java_org_iotivity_base_OcRepresentation_isNull\r
992 (JNIEnv *env, jobject thiz, jstring jAttributeKey)\r
993 {\r
994     LOGD("OcRepresentation_isNull");\r
995     if (!jAttributeKey)\r
996     {\r
997         ThrowOcException(OC_STACK_INVALID_PARAM, "attributeKey cannot be null");\r
998         return false;\r
999     }\r
1000     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
1001     if (!rep) return false;\r
1002 \r
1003     std::string attributeKey = env->GetStringUTFChars(jAttributeKey, NULL);\r
1004     return static_cast<jboolean>(rep->isNULL(attributeKey));\r
1005 }\r
1006 \r
1007 /*\r
1008 * Class:     org_iotivity_base_OcRepresentation\r
1009 * Method:    create\r
1010 * Signature: ()V\r
1011 */\r
1012 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_create\r
1013 (JNIEnv *env, jobject thiz)\r
1014 {\r
1015     LOGD("OcRepresentation_create");\r
1016     OCRepresentation *rep = new OCRepresentation();\r
1017     SetHandle<OCRepresentation>(env, thiz, rep);\r
1018     if (env->ExceptionCheck())\r
1019     {\r
1020         LOGE("Failed to set native handle for OcRepresentation");\r
1021         delete rep;\r
1022     }\r
1023 }\r
1024 \r
1025 /*\r
1026 * Class:     org_iotivity_base_OcRepresentation\r
1027 * Method:    dispose\r
1028 * Signature: ()V\r
1029 */\r
1030 JNIEXPORT void JNICALL Java_org_iotivity_base_OcRepresentation_dispose\r
1031 (JNIEnv *env, jobject thiz, jboolean jNeedsDelete)\r
1032 {\r
1033     LOGD("OcRepresentation_dispose");\r
1034     OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, thiz);\r
1035 \r
1036     if (jNeedsDelete)\r
1037     {\r
1038         delete rep;\r
1039     }\r
1040 }