Imported Upstream version 0.9.1
[platform/upstream/iotivity.git] / service / things-manager / sdk / java / 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
29 bool JSetter::setJStringField(JNIEnv *env, jobject &object, const char *fieldName,
30                               const char *value)
31 {
32     if (NULL == env || NULL == fieldName)
33     {
34         LOGE("setJStringField invalid parameters");
35         return false;
36     }
37
38     jclass clazz = env->GetObjectClass( object );
39     if (NULL == clazz)
40     {
41         LOGE("GetObjectClass failed");
42         return false;
43     }
44
45     jfieldID fieldID = env->GetFieldID( clazz, fieldName, "Ljava/lang/String;");
46     if (0 == fieldID)
47     {
48         LOGE("GetFieldID failed [%s]", fieldName);
49         env->DeleteLocalRef( clazz );
50         return false;
51     }
52
53     jstring jvalue ;
54     if (value != NULL && strlen(value) > 0)
55     {
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);
65     }
66     else
67     {
68         jvalue = env->NewStringUTF("");
69     }
70
71     env->SetObjectField(object, fieldID, jvalue);
72
73     env->DeleteLocalRef(jvalue);
74     env->DeleteLocalRef( clazz );
75
76     return true;
77 }
78
79
80 bool JSetter::setJIntField(JNIEnv *env, jobject &object, const char *fieldName, int value)
81 {
82     if (NULL == env || NULL == fieldName)
83     {
84         LOGE("setJIntField invalid paramter");
85         return false;
86     }
87
88     jclass clazz = env->GetObjectClass( object );
89     if (NULL == clazz)
90     {
91         LOGE("GetObjectClass failed");
92         return false;
93     }
94
95     jfieldID fieldID = env->GetFieldID( clazz, fieldName, "I");
96     if (0 == fieldID)
97     {
98         LOGE("GetFieldID failed [%s]", fieldName);
99         env->DeleteLocalRef( clazz );
100         return false;
101     }
102     env->SetIntField(object, fieldID, value);
103
104     env->DeleteLocalRef( clazz );
105
106     return true;
107 }
108
109
110 bool JSetter::setJLongField(JNIEnv *env, jobject &object, const char *fieldName, jlong value)
111 {
112     if (NULL == env || NULL == fieldName)
113     {
114         LOGE("setJLongField invalid parameters");
115         return false;
116     }
117
118     jclass clazz = env->GetObjectClass( object );
119     if (NULL == clazz)
120     {
121         LOGE("GetObjectClass failed");
122         return false;
123     }
124
125     jfieldID fieldID = env->GetFieldID( clazz, fieldName, "J");
126     if (0 == fieldID)
127     {
128         LOGE("GetFieldID failed [%s]", fieldName);
129         env->DeleteLocalRef( clazz );
130         return false;
131     }
132     env->SetLongField(object, fieldID, value);
133
134     env->DeleteLocalRef( clazz );
135
136     return true;
137 }
138
139
140 bool JSetter::setJBoolField(JNIEnv *env, jobject &object, const char *fieldName, bool value)
141 {
142     if (NULL == env || NULL == fieldName)
143     {
144         LOGE("setJBoolField invalid parameters");
145         return false;
146     }
147
148     jclass clazz = env->GetObjectClass( object );
149     if (NULL == clazz)
150     {
151         LOGE("GetObjectClass failed");
152         return false;
153     }
154
155     jfieldID fieldID = env->GetFieldID( clazz, fieldName, "Z");
156     if (0 == fieldID)
157     {
158         LOGE("GetFieldID failed [%s]", fieldName);
159         env->DeleteLocalRef( clazz );
160         return false;
161     }
162     env->SetBooleanField(object, fieldID, value);
163
164     env->DeleteLocalRef( clazz );
165
166     return true;
167 }
168
169
170 bool JSetter::setJObjectField(JNIEnv *env, jobject &object, const char *fieldName,
171                               const char *fieldType, const jobject value)
172 {
173     if (NULL == env || NULL == fieldName)
174     {
175         LOGE("setJBoolField invalid parameters");
176         return false;
177     }
178
179     jclass clazz = env->GetObjectClass( object );
180     if (NULL == clazz)
181     {
182         LOGE("GetObjectClass failed");
183         return false;
184     }
185
186     jfieldID fieldID = env->GetFieldID( clazz, fieldName, fieldType);
187     if (0 == fieldID)
188     {
189         LOGE("GetFieldID failed [%s] [%s]", fieldName, fieldType);
190         env->DeleteLocalRef( clazz );
191         return false;
192     }
193     env->SetObjectField(object, fieldID, value);
194
195     env->DeleteLocalRef( clazz );
196
197     return true;
198 }
199