Imported Upstream version 1.0.1
[platform/upstream/iotivity.git] / service / easy-setup / sdk / mediator / android / jni / jniutil / src / jni_getter.cpp
1 /******************************************************************
2  *
3  * Copyright 2015 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************/
20 #include "jni_getter.h"
21
22 #include <string>
23
24 #include "JniOcResource.h"
25
26 #define LOG_TAG "TM_JGetter"
27
28 bool JGetter::getJStringField(JNIEnv *env, jobject &object,
29         const char *fieldName, std::string &value) {
30     if (NULL == env || NULL == object || NULL == fieldName) {
31         LOGE("getJStringField invalid parameters");
32         return false;
33     }
34
35     jclass clazz = env->GetObjectClass(object);
36     if (NULL == clazz) {
37         LOGE("GetObjectClass failed [%s]", fieldName);
38         return false;
39     }
40
41     jfieldID fieldID = env->GetFieldID(clazz, fieldName, "Ljava/lang/String;");
42     if (0 == fieldID) {
43         LOGE("GetFieldID failed [%s]", fieldName);
44         env->DeleteLocalRef(clazz);
45         return false;
46     }
47
48     jstring jValue = (jstring) env->GetObjectField(object, fieldID);
49     if (NULL == jValue) {
50         LOGE("GetObjectField failed [%s]", fieldName);
51         env->DeleteLocalRef(clazz);
52         return false;
53     }
54
55     const char *cstr = env->GetStringUTFChars(jValue, 0);
56     if (cstr == NULL) {
57         LOGE("GetStringUTFChars failed");
58     } else {
59         value = cstr;
60         env->ReleaseStringUTFChars(jValue, cstr);
61     }
62
63     env->DeleteLocalRef(clazz);
64     env->DeleteLocalRef(jValue);
65
66     return true;
67 }
68
69 bool JGetter::getJBoolField(JNIEnv *env, jobject &object, const char *fieldName,
70         bool &value) {
71     if (NULL == env || NULL == object || NULL == fieldName) {
72         LOGE("getJBoolField invalid parameters");
73         return false;
74     }
75
76     jclass clazz = env->GetObjectClass(object);
77     if (NULL == clazz) {
78         LOGE("GetObjectClass failed");
79         return false;
80     }
81
82     jfieldID fieldID = env->GetFieldID(clazz, fieldName, "Z");
83     if (0 == fieldID) {
84         LOGE("GetFieldID failed [%s]", fieldName);
85         env->DeleteLocalRef(clazz);
86         return false;
87     }
88
89     value = env->GetBooleanField(object, fieldID);
90
91     env->DeleteLocalRef(clazz);
92
93     return true;
94 }
95
96 bool JGetter::getJIntField(JNIEnv *env, jobject &object, const char *fieldName,
97         int &value) {
98     if (NULL == env || NULL == object || NULL == fieldName) {
99         LOGE("getJIntField invalid parameters");
100         return false;
101     }
102
103     jclass clazz = env->GetObjectClass(object);
104     if (NULL == clazz) {
105         LOGE("GetObjectClass failed");
106         return false;
107     }
108
109     jfieldID fieldID = env->GetFieldID(clazz, fieldName, "I");
110     if (0 == fieldID) {
111         LOGE("GetFieldID failed [%s]", fieldName);
112         env->DeleteLocalRef(clazz);
113         return false;
114     }
115
116     value = env->GetIntField(object, fieldID);
117
118     env->DeleteLocalRef(clazz);
119
120     return true;
121 }
122
123 bool JGetter::getJObjectField(JNIEnv *env, jobject &object,
124         const char *fieldName, const char *fieldType, jobject &value) {
125     if (NULL == env || NULL == object || NULL == fieldName) {
126         return false;
127     }
128
129     jclass clazz = env->GetObjectClass(object);
130     if (NULL == clazz) {
131         return false;
132     }
133
134     jfieldID fieldID = env->GetFieldID(clazz, fieldName, fieldType);
135     if (0 == fieldID) {
136         LOGE("GetFieldID failed [%s][%s]", fieldName, fieldType);
137         return false;
138     }
139
140     value = env->GetObjectField(object, fieldID);
141     if (NULL == value) {
142         return false;
143     }
144
145     env->DeleteLocalRef(clazz);
146
147     return true;
148 }