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 ******************************************************************/
21 #ifndef JAVA_CLASSES_H_
22 #define JAVA_CLASSES_H_
28 #define PACKAGE_NAME "org/iotivity/service"
30 #define CLS_NAME_VALUE PACKAGE_NAME "/RcsValue"
32 #define CLS_NAME_RESOURCEATTRIBUTES PACKAGE_NAME "/RcsResourceAttributes"
33 #define CLS_NAME_REMOTERESOURCEOBJECT PACKAGE_NAME "/client/RcsRemoteResourceObject"
35 #define CLS_NAME_OBJECT "java/lang/Object"
36 #define CLS_NAME_STRING "java/lang/String"
37 #define CLS_NAME_INTEGER "java/lang/Integer"
38 #define CLS_NAME_DOUBLE "java/lang/Double"
39 #define CLS_NAME_BOOLEAN "java/lang/Boolean"
41 #define CLS_NAME_COLLECTION "java/util/Collection"
42 #define CLS_NAME_ARRAY_LIST "java/util/ArrayList"
43 #define CLS_NAME_SET "java/util/Set"
44 #define CLS_NAME_MAP "java/util/Map"
45 #define CLS_NAME_MAP_ENTRY "java/util/Map$Entry"
46 #define CLS_NAME_ITERATOR "java/util/Iterator"
48 #define EXC_NAME_RCS PACKAGE_NAME "/RcsException"
49 #define EXC_NAME_PLATFORM PACKAGE_NAME "/RcsPlatformException"
50 #define EXC_NAME_ILLEGAL_STATE PACKAGE_NAME "/RcsIllegalStateException"
52 #define AS_SIG(CLS_NAME) "L" CLS_NAME ";"
56 extern jclass g_cls_Integer;
57 extern jclass g_cls_Double;
58 extern jclass g_cls_Boolean;
59 extern jclass g_cls_String;
61 extern jclass g_cls_ArrayList;
62 extern jclass g_cls_Set;
63 extern jclass g_cls_Map;
64 extern jclass g_cls_MapEntry;
65 extern jclass g_cls_Iterator;
67 extern jmethodID g_method_Boolean_booleanValue;
68 extern jmethodID g_method_Integer_intValue;
69 extern jmethodID g_method_Double_doubleValue;
71 extern jmethodID g_method_Collection_add;
73 extern jmethodID g_method_Set_iterator;
75 extern jmethodID g_method_Map_entrySet;
76 extern jmethodID g_method_Map_put;
78 extern jmethodID g_method_MapEntry_getKey;
79 extern jmethodID g_method_MapEntry_getValue;
81 extern jmethodID g_method_Iterator_hasNext;
82 extern jmethodID g_method_Iterator_next;
84 extern jmethodID g_ctor_Boolean;
85 extern jmethodID g_ctor_Integer;
86 extern jmethodID g_ctor_Double;
88 extern jmethodID g_ctor_ArrayList;
90 void initJavaClasses(JNIEnvWrapper*);
91 void clearJavaClasses(JNIEnvWrapper*);
93 template< typename ENV >
94 inline jobject newBooleanObject(ENV* env, bool value)
96 return env->NewObject(g_cls_Boolean, g_ctor_Boolean, value);
99 template< typename ENV >
100 inline jobject newIntegerObject(ENV* env, int value)
102 return env->NewObject(g_cls_Integer, g_ctor_Integer, value);
105 template< typename ENV >
106 inline jobject newDoubleObject(ENV* env, double value)
108 return env->NewObject(g_cls_Double, g_ctor_Double, value);
111 template< typename ENV >
112 inline jstring newStringObject(ENV* env, const std::string& value)
114 return env->NewStringUTF(value.c_str());
117 template< typename ENV >
118 inline jstring newStringObjectCstr(ENV* env, const char* value)
120 return env->NewStringUTF(value);
123 template< typename ENV >
124 inline std::string toStdString(ENV* env, jstring obj)
128 auto cstr = env->GetStringUTFChars(obj, nullptr);
130 if (!cstr) return "";
132 std::string result{ cstr };
134 env->ReleaseStringUTFChars(obj, cstr);
139 template< typename ENV >
140 inline jobject newArrayList(ENV* env)
142 return env->NewObject(g_cls_ArrayList, g_ctor_ArrayList);
145 template< typename ENV >
146 inline bool invoke_Boolean_booleanValue(ENV* env, jobject obj)
148 return env->CallBooleanMethod(obj, g_method_Boolean_booleanValue);
151 template< typename ENV >
152 inline int invoke_Integer_intValue(ENV* env, jobject obj)
154 return env->CallIntMethod(obj, g_method_Integer_intValue);
157 template< typename ENV >
158 inline double invoke_Double_doubleValue(ENV* env, jobject obj)
160 return env->CallDoubleMethod(obj, g_method_Double_doubleValue);
163 template< typename ENV >
164 inline jboolean invoke_Collection_add(ENV* env, jobject collectionObj, jobject valueObj)
166 return env->CallBooleanMethod(collectionObj, g_method_Collection_add, valueObj);
169 template< typename ENV >
170 inline jobject invoke_Map_entrySet(ENV* env, jobject mapObj)
172 return env->CallObjectMethod(mapObj, g_method_Map_entrySet);
175 template< typename ENV >
176 inline jobject invoke_Map_put(ENV* env, jobject mapObj, jobject keyObj, jobject valueObj)
178 return env->CallObjectMethod(mapObj, g_method_Map_put, keyObj, valueObj);
181 template< typename ENV >
182 inline jobject invoke_MapEntry_getKey(ENV* env, jobject entryObj)
184 return env->CallObjectMethod(entryObj, g_method_MapEntry_getKey);
187 template< typename ENV >
188 inline jobject invoke_MapEntry_getValue(ENV* env, jobject entryObj)
190 return env->CallObjectMethod(entryObj, g_method_MapEntry_getValue);
193 template< typename ENV >
194 inline jobject invoke_Set_iterator(ENV* env, jobject setObj)
196 return env->CallObjectMethod(setObj, g_method_Set_iterator);
199 template< typename ENV >
200 inline bool invoke_Iterator_hasNext(ENV* env, jobject iterObj)
202 return env->CallBooleanMethod(iterObj, g_method_Iterator_hasNext);
205 template< typename ENV >
206 inline jobject invoke_Iterator_next(ENV* env, jobject iterObj)
208 return env->CallObjectMethod(iterObj, g_method_Iterator_next);
211 #endif // JAVA_CLASSES_H_