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_re_jvm.h"
21 #include "jni_re_utils.h"
25 jclass g_cls_Integer = NULL;
26 jclass g_cls_Double = NULL;
27 jclass g_cls_Boolean = NULL;
28 jclass g_cls_String = NULL;
29 jclass g_cls_LinkedList = NULL;
30 jclass g_cls_Iterator = NULL;
31 jclass g_cls_Vector = NULL;
32 jclass g_cls_Map = NULL;
33 jclass g_cls_Set = NULL;
34 jclass g_cls_MapEntry = NULL;
35 jclass g_cls_RCSRemoteResourceObject = NULL;
36 jclass g_cls_RCSRemoteResourceAttributesObject = NULL;
37 jclass g_cls_RCSException = NULL;
39 jclass g_cls_RCSResourceObject = NULL;
40 jclass g_cls_RCSRequest = NULL;
41 jclass g_cls_RCSBundleInfo = NULL;
43 jmethodID g_mid_Integer_ctor = NULL;
44 jmethodID g_mid_Double_ctor = NULL;
45 jmethodID g_mid_Boolean_ctor = NULL;
46 jmethodID g_mid_LinkedList_ctor = NULL;
47 jmethodID g_mid_Set_iterator = NULL;
48 jmethodID g_mid_LinkedList_add_object = NULL;
49 jmethodID g_mid_Map_entrySet = NULL;
50 jmethodID g_mid_MapEntry_getKey = NULL;
51 jmethodID g_mid_MapEntry_getValue = NULL;
52 jmethodID g_mid_Iterator_hasNext = NULL;
53 jmethodID g_mid_Iterator_next = NULL;
54 jmethodID g_mid_RCSRemoteResourceObject_ctor = NULL;
55 jmethodID g_mid_RCSRemoteResourceAttributesObject_ctor = NULL;
56 jmethodID g_mid_RCSException_ctor = NULL;
58 jmethodID g_mid_RCSResourceObject_ctor = NULL;
59 jmethodID g_mid_RCSRequest_ctor = NULL;
60 jmethodID g_mid_RCSBundleInfo_ctor = NULL;
63 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
69 if (g_jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
71 LOGE("Failed to get the environment using GetEnv()");
75 jclass clazz = nullptr;
78 clazz = env->FindClass("java/lang/Integer");
79 if (!clazz) return JNI_ERR;
80 g_cls_Integer = (jclass)env->NewGlobalRef(clazz);
81 env->DeleteLocalRef(clazz);
83 g_mid_Integer_ctor = env->GetMethodID(g_cls_Integer, "<init>", "(I)V");
84 if (!g_mid_Integer_ctor) return JNI_ERR;
87 clazz = env->FindClass("java/lang/Double");
88 if (!clazz) return JNI_ERR;
89 g_cls_Double = (jclass)env->NewGlobalRef(clazz);
90 env->DeleteLocalRef(clazz);
92 g_mid_Double_ctor = env->GetMethodID(g_cls_Double, "<init>", "(D)V");
93 if (!g_mid_Double_ctor) return JNI_ERR;
96 clazz = env->FindClass("java/lang/Boolean");
97 if (!clazz) return JNI_ERR;
98 g_cls_Boolean = (jclass)env->NewGlobalRef(clazz);
99 env->DeleteLocalRef(clazz);
101 g_mid_Boolean_ctor = env->GetMethodID(g_cls_Boolean, "<init>", "(Z)V");
102 if (!g_mid_Boolean_ctor) return JNI_ERR;
105 clazz = env->FindClass("java/lang/String");
106 if (!clazz) return JNI_ERR;
107 g_cls_String = (jclass)env->NewGlobalRef(clazz);
108 env->DeleteLocalRef(clazz);
111 clazz = env->FindClass("java/util/LinkedList");
112 if (!clazz) return JNI_ERR;
113 g_cls_LinkedList = (jclass)env->NewGlobalRef(clazz);
114 env->DeleteLocalRef(clazz);
116 g_mid_LinkedList_ctor = env->GetMethodID(g_cls_LinkedList, "<init>", "()V");
117 if (!g_mid_LinkedList_ctor) return JNI_ERR;
119 g_mid_LinkedList_add_object = env->GetMethodID(g_cls_LinkedList, "add", "(Ljava/lang/Object;)Z");
120 if (!g_mid_LinkedList_add_object) return JNI_ERR;
123 clazz = env->FindClass("java/util/Map");
124 if (!clazz) return JNI_ERR;
125 g_cls_Map = (jclass)env->NewGlobalRef(clazz);
126 env->DeleteLocalRef(clazz);
128 g_mid_Map_entrySet = env->GetMethodID(g_cls_Map, "entrySet", "()Ljava/util/Set;");
129 if (!g_mid_Map_entrySet) return JNI_ERR;
132 clazz = env->FindClass("java/util/Map$Entry");
133 if (!clazz) return JNI_ERR;
134 g_cls_MapEntry = (jclass)env->NewGlobalRef(clazz);
135 env->DeleteLocalRef(clazz);
137 g_mid_MapEntry_getKey = env->GetMethodID(g_cls_MapEntry, "getKey", "()Ljava/lang/Object;");
138 if (!g_mid_MapEntry_getKey) return JNI_ERR;
139 g_mid_MapEntry_getValue = env->GetMethodID(g_cls_MapEntry, "getValue", "()Ljava/lang/Object;");
140 if (!g_mid_MapEntry_getValue) return JNI_ERR;
143 clazz = env->FindClass("java/util/Set");
144 if (!clazz) return JNI_ERR;
145 g_cls_Set = (jclass)env->NewGlobalRef(clazz);
146 env->DeleteLocalRef(clazz);
148 g_mid_Set_iterator = env->GetMethodID(g_cls_Set, "iterator", "()Ljava/util/Iterator;");
149 if (!g_mid_Set_iterator) return JNI_ERR;
152 clazz = env->FindClass("java/util/Iterator");
153 if (!clazz) return JNI_ERR;
154 g_cls_Iterator = (jclass)env->NewGlobalRef(clazz);
155 env->DeleteLocalRef(clazz);
157 g_mid_Iterator_hasNext = env->GetMethodID(g_cls_Iterator, "hasNext", "()Z");
158 if (!g_mid_Iterator_hasNext) return JNI_ERR;
160 g_mid_Iterator_next = env->GetMethodID(g_cls_Iterator, "next", "()Ljava/lang/Object;");
161 if (!g_mid_Iterator_next) return JNI_ERR;
164 clazz = env->FindClass("java/util/Vector");
165 if (!clazz) return JNI_ERR;
166 g_cls_Vector = (jclass)env->NewGlobalRef(clazz);
167 env->DeleteLocalRef(clazz);
169 //RCSRemoteResourceObject
170 clazz = env->FindClass("org/iotivity/ResourceEncapsulation/client/RCSRemoteResourceObject");
171 if (!clazz) return JNI_ERR;
172 g_cls_RCSRemoteResourceObject = (jclass)env->NewGlobalRef(clazz);
173 env->DeleteLocalRef(clazz);
175 g_mid_RCSRemoteResourceObject_ctor = env->GetMethodID(g_cls_RCSRemoteResourceObject, "<init>",
177 if (!g_mid_RCSRemoteResourceObject_ctor) return JNI_ERR;
180 jclass tmpclazz = reinterpret_cast<jclass>
181 (env->FindClass("org/iotivity/ResourceEncapsulation/client/RCSRemoteResourceObject$ResourceState"));
184 LOGE("Failed to get the class ResourceState");
187 ResourceStateWrapper::clazz = reinterpret_cast<jclass> (env->NewGlobalRef(tmpclazz));
188 env->DeleteLocalRef(tmpclazz);
190 //RCS Remote Resource Attributes
191 clazz = env->FindClass("org/iotivity/ResourceEncapsulation/common/RCSResourceAttributes");
192 if (!clazz) return JNI_ERR;
193 g_cls_RCSRemoteResourceAttributesObject = (jclass)env->NewGlobalRef(clazz);
194 env->DeleteLocalRef(clazz);
196 g_mid_RCSRemoteResourceAttributesObject_ctor = env->GetMethodID(
197 g_cls_RCSRemoteResourceAttributesObject, "<init>", "(J)V");
198 if (!g_mid_RCSRemoteResourceAttributesObject_ctor) return JNI_ERR;
201 clazz = env->FindClass("org/iotivity/ResourceEncapsulation/common/RCSException");
202 if (!clazz) return JNI_ERR;
203 g_cls_RCSException = (jclass)env->NewGlobalRef(clazz);
204 env->DeleteLocalRef(clazz);
206 g_mid_RCSException_ctor = env->GetMethodID(g_cls_RCSException, "<init>", "(Ljava/lang/String;)V");
207 if (!g_mid_RCSException_ctor) return JNI_ERR;
210 clazz = env->FindClass("org/iotivity/ResourceEncapsulation/server/RCSResourceObject");
211 if (!clazz) return JNI_ERR;
212 g_cls_RCSResourceObject = (jclass)env->NewGlobalRef(clazz);
213 env->DeleteLocalRef(clazz);
215 g_mid_RCSResourceObject_ctor = env->GetMethodID(g_cls_RCSResourceObject, "<init>",
217 if (!g_mid_RCSResourceObject_ctor) return JNI_ERR;
220 clazz = env->FindClass("org/iotivity/ResourceEncapsulation/server/RCSRequest");
221 if (!clazz) return JNI_ERR;
222 g_cls_RCSRequest = (jclass)env->NewGlobalRef(clazz);
223 env->DeleteLocalRef(clazz);
226 clazz = env->FindClass("org/iotivity/ResourceEncapsulation/server/RCSBundleInfo");
227 if (!clazz) return JNI_ERR;
228 g_cls_RCSBundleInfo = (jclass)env->NewGlobalRef(clazz);
229 env->DeleteLocalRef(clazz);
231 g_mid_RCSBundleInfo_ctor = env->GetMethodID(g_cls_RCSBundleInfo, "<init>",
233 if (!g_mid_RCSBundleInfo_ctor) return JNI_ERR;
235 return JNI_CURRENT_VERSION;
238 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)
240 LOGI("JNI_OnUnload");
243 if (g_jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
245 LOGE("Failed to get the environment using GetEnv()");
249 env->DeleteGlobalRef(g_cls_Integer);
250 env->DeleteGlobalRef(g_cls_Double);
251 env->DeleteGlobalRef(g_cls_Boolean);
252 env->DeleteGlobalRef(g_cls_String);
253 env->DeleteGlobalRef(g_cls_LinkedList);
254 env->DeleteGlobalRef(g_cls_Iterator);
255 env->DeleteGlobalRef(g_cls_RCSRemoteResourceObject);
256 env->DeleteGlobalRef(g_cls_RCSRemoteResourceAttributesObject);
257 env->DeleteGlobalRef(g_cls_RCSException);
258 env->DeleteGlobalRef(g_cls_RCSResourceObject);
259 env->DeleteGlobalRef(g_cls_RCSRequest);
260 env->DeleteGlobalRef(g_cls_Map);
261 env->DeleteGlobalRef(g_cls_Set);
262 env->DeleteGlobalRef(g_cls_MapEntry);
263 env->DeleteGlobalRef(g_cls_RCSBundleInfo);
267 if (ResourceStateWrapper::clazz != 0)
268 env->DeleteGlobalRef(ResourceStateWrapper::clazz);