1 /******************************************************************
3 * Copyright 2015 Samsung Electronics All Rights Reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 ******************************************************************/
20 #include "jni_setter.h"
24 #include "JniOcResource.h"
26 #define LOG_TAG "TM_JSetter"
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");
35 jclass clazz = env->GetObjectClass(object);
37 LOGE("GetObjectClass failed");
41 jfieldID fieldID = env->GetFieldID(clazz, fieldName, "Ljava/lang/String;");
43 LOGE("GetFieldID failed [%s]", fieldName);
44 env->DeleteLocalRef(clazz);
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);
61 jvalue = env->NewStringUTF("");
64 env->SetObjectField(object, fieldID, jvalue);
66 env->DeleteLocalRef(jvalue);
67 env->DeleteLocalRef(clazz);
72 bool JSetter::setJIntField(JNIEnv *env, jobject &object, const char *fieldName,
74 if (NULL == env || NULL == fieldName) {
75 LOGE("setJIntField invalid paramter");
79 jclass clazz = env->GetObjectClass(object);
81 LOGE("GetObjectClass failed");
85 jfieldID fieldID = env->GetFieldID(clazz, fieldName, "I");
87 LOGE("GetFieldID failed [%s]", fieldName);
88 env->DeleteLocalRef(clazz);
91 env->SetIntField(object, fieldID, value);
93 env->DeleteLocalRef(clazz);
98 bool JSetter::setJLongField(JNIEnv *env, jobject &object, const char *fieldName,
100 if (NULL == env || NULL == fieldName) {
101 LOGE("setJLongField invalid parameters");
105 jclass clazz = env->GetObjectClass(object);
107 LOGE("GetObjectClass failed");
111 jfieldID fieldID = env->GetFieldID(clazz, fieldName, "J");
113 LOGE("GetFieldID failed [%s]", fieldName);
114 env->DeleteLocalRef(clazz);
117 env->SetLongField(object, fieldID, value);
119 env->DeleteLocalRef(clazz);
124 bool JSetter::setJBoolField(JNIEnv *env, jobject &object, const char *fieldName,
126 if (NULL == env || NULL == fieldName) {
127 LOGE("setJBoolField invalid parameters");
131 jclass clazz = env->GetObjectClass(object);
133 LOGE("GetObjectClass failed");
137 jfieldID fieldID = env->GetFieldID(clazz, fieldName, "Z");
139 LOGE("GetFieldID failed [%s]", fieldName);
140 env->DeleteLocalRef(clazz);
143 env->SetBooleanField(object, fieldID, value);
145 env->DeleteLocalRef(clazz);
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");
157 jclass clazz = env->GetObjectClass(object);
159 LOGE("GetObjectClass failed");
163 jfieldID fieldID = env->GetFieldID(clazz, fieldName, fieldType);
165 LOGE("GetFieldID failed [%s] [%s]", fieldName, fieldType);
166 env->DeleteLocalRef(clazz);
169 env->SetObjectField(object, fieldID, value);
171 env->DeleteLocalRef(clazz);