Imported Upstream version 1.0.0
[platform/upstream/iotivity.git] / service / easy-setup / sdk / mediator / android / jni / jniutil / src / jni_setter.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_setter.h"
21
22 #include <string>
23
24 #include "JniOcResource.h"
25
26 #define LOG_TAG "TM_JSetter"
27
28 bool JSetter::setJStringField(JNIEnv *env, jobject &object,
29                 const char *fieldName, const char *value) {
30         if (NULL == env || NULL == fieldName) {
31                 LOGE("setJStringField invalid parameters");
32                 return false;
33         }
34
35         jclass clazz = env->GetObjectClass(object);
36         if (NULL == clazz) {
37                 LOGE("GetObjectClass failed");
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;
49         if (value != NULL && strlen(value) > 0) {
50                 jclass strClass = env->FindClass("java/lang/String");
51                 jmethodID ctorID = env->GetMethodID(strClass, "<init>",
52                                 "([BLjava/lang/String;)V");
53                 jbyteArray bytes = env->NewByteArray(strlen(value));
54                 env->SetByteArrayRegion(bytes, 0, strlen(value), (jbyte *) value);
55                 jstring encoding = env->NewStringUTF("utf-8");
56                 jvalue = (jstring) env->NewObject(strClass, ctorID, bytes, encoding);
57                 env->DeleteLocalRef(strClass);
58                 env->DeleteLocalRef(bytes);
59                 env->DeleteLocalRef(encoding);
60         } else {
61                 jvalue = env->NewStringUTF("");
62         }
63
64         env->SetObjectField(object, fieldID, jvalue);
65
66         env->DeleteLocalRef(jvalue);
67         env->DeleteLocalRef(clazz);
68
69         return true;
70 }
71
72 bool JSetter::setJIntField(JNIEnv *env, jobject &object, const char *fieldName,
73                 int value) {
74         if (NULL == env || NULL == fieldName) {
75                 LOGE("setJIntField invalid paramter");
76                 return false;
77         }
78
79         jclass clazz = env->GetObjectClass(object);
80         if (NULL == clazz) {
81                 LOGE("GetObjectClass failed");
82                 return false;
83         }
84
85         jfieldID fieldID = env->GetFieldID(clazz, fieldName, "I");
86         if (0 == fieldID) {
87                 LOGE("GetFieldID failed [%s]", fieldName);
88                 env->DeleteLocalRef(clazz);
89                 return false;
90         }
91         env->SetIntField(object, fieldID, value);
92
93         env->DeleteLocalRef(clazz);
94
95         return true;
96 }
97
98 bool JSetter::setJLongField(JNIEnv *env, jobject &object, const char *fieldName,
99                 jlong value) {
100         if (NULL == env || NULL == fieldName) {
101                 LOGE("setJLongField invalid parameters");
102                 return false;
103         }
104
105         jclass clazz = env->GetObjectClass(object);
106         if (NULL == clazz) {
107                 LOGE("GetObjectClass failed");
108                 return false;
109         }
110
111         jfieldID fieldID = env->GetFieldID(clazz, fieldName, "J");
112         if (0 == fieldID) {
113                 LOGE("GetFieldID failed [%s]", fieldName);
114                 env->DeleteLocalRef(clazz);
115                 return false;
116         }
117         env->SetLongField(object, fieldID, value);
118
119         env->DeleteLocalRef(clazz);
120
121         return true;
122 }
123
124 bool JSetter::setJBoolField(JNIEnv *env, jobject &object, const char *fieldName,
125                 bool value) {
126         if (NULL == env || NULL == fieldName) {
127                 LOGE("setJBoolField invalid parameters");
128                 return false;
129         }
130
131         jclass clazz = env->GetObjectClass(object);
132         if (NULL == clazz) {
133                 LOGE("GetObjectClass failed");
134                 return false;
135         }
136
137         jfieldID fieldID = env->GetFieldID(clazz, fieldName, "Z");
138         if (0 == fieldID) {
139                 LOGE("GetFieldID failed [%s]", fieldName);
140                 env->DeleteLocalRef(clazz);
141                 return false;
142         }
143         env->SetBooleanField(object, fieldID, value);
144
145         env->DeleteLocalRef(clazz);
146
147         return true;
148 }
149
150 bool JSetter::setJObjectField(JNIEnv *env, jobject &object,
151                 const char *fieldName, const char *fieldType, const jobject value) {
152         if (NULL == env || NULL == fieldName) {
153                 LOGE("setJBoolField invalid parameters");
154                 return false;
155         }
156
157         jclass clazz = env->GetObjectClass(object);
158         if (NULL == clazz) {
159                 LOGE("GetObjectClass failed");
160                 return false;
161         }
162
163         jfieldID fieldID = env->GetFieldID(clazz, fieldName, fieldType);
164         if (0 == fieldID) {
165                 LOGE("GetFieldID failed [%s] [%s]", fieldName, fieldType);
166                 env->DeleteLocalRef(clazz);
167                 return false;
168         }
169         env->SetObjectField(object, fieldID, value);
170
171         env->DeleteLocalRef(clazz);
172
173         return true;
174 }
175