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"
29 bool JSetter::setJStringField(JNIEnv *env, jobject &object, const char *fieldName,
32 if (NULL == env || NULL == fieldName)
34 LOGE("setJStringField invalid parameters");
38 jclass clazz = env->GetObjectClass( object );
41 LOGE("GetObjectClass failed");
45 jfieldID fieldID = env->GetFieldID( clazz, fieldName, "Ljava/lang/String;");
48 LOGE("GetFieldID failed [%s]", fieldName);
49 env->DeleteLocalRef( clazz );
54 if (value != NULL && strlen(value) > 0)
56 jclass strClass = env->FindClass("java/lang/String");
57 jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
58 jbyteArray bytes = env->NewByteArray(strlen(value));
59 env->SetByteArrayRegion(bytes, 0, strlen(value), (jbyte *)value);
60 jstring encoding = env->NewStringUTF("utf-8");
61 jvalue = (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
62 env->DeleteLocalRef(strClass);
63 env->DeleteLocalRef(bytes);
64 env->DeleteLocalRef(encoding);
68 jvalue = env->NewStringUTF("");
71 env->SetObjectField(object, fieldID, jvalue);
73 env->DeleteLocalRef(jvalue);
74 env->DeleteLocalRef( clazz );
80 bool JSetter::setJIntField(JNIEnv *env, jobject &object, const char *fieldName, int value)
82 if (NULL == env || NULL == fieldName)
84 LOGE("setJIntField invalid paramter");
88 jclass clazz = env->GetObjectClass( object );
91 LOGE("GetObjectClass failed");
95 jfieldID fieldID = env->GetFieldID( clazz, fieldName, "I");
98 LOGE("GetFieldID failed [%s]", fieldName);
99 env->DeleteLocalRef( clazz );
102 env->SetIntField(object, fieldID, value);
104 env->DeleteLocalRef( clazz );
110 bool JSetter::setJLongField(JNIEnv *env, jobject &object, const char *fieldName, jlong value)
112 if (NULL == env || NULL == fieldName)
114 LOGE("setJLongField invalid parameters");
118 jclass clazz = env->GetObjectClass( object );
121 LOGE("GetObjectClass failed");
125 jfieldID fieldID = env->GetFieldID( clazz, fieldName, "J");
128 LOGE("GetFieldID failed [%s]", fieldName);
129 env->DeleteLocalRef( clazz );
132 env->SetLongField(object, fieldID, value);
134 env->DeleteLocalRef( clazz );
140 bool JSetter::setJBoolField(JNIEnv *env, jobject &object, const char *fieldName, bool value)
142 if (NULL == env || NULL == fieldName)
144 LOGE("setJBoolField invalid parameters");
148 jclass clazz = env->GetObjectClass( object );
151 LOGE("GetObjectClass failed");
155 jfieldID fieldID = env->GetFieldID( clazz, fieldName, "Z");
158 LOGE("GetFieldID failed [%s]", fieldName);
159 env->DeleteLocalRef( clazz );
162 env->SetBooleanField(object, fieldID, value);
164 env->DeleteLocalRef( clazz );
170 bool JSetter::setJObjectField(JNIEnv *env, jobject &object, const char *fieldName,
171 const char *fieldType, const jobject value)
173 if (NULL == env || NULL == fieldName)
175 LOGE("setJBoolField invalid parameters");
179 jclass clazz = env->GetObjectClass( object );
182 LOGE("GetObjectClass failed");
186 jfieldID fieldID = env->GetFieldID( clazz, fieldName, fieldType);
189 LOGE("GetFieldID failed [%s] [%s]", fieldName, fieldType);
190 env->DeleteLocalRef( clazz );
193 env->SetObjectField(object, fieldID, value);
195 env->DeleteLocalRef( clazz );