replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / resource-encapsulation / android / service / src / main / jni / util / JavaClasses.h
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
21 #ifndef JAVA_CLASSES_H_
22 #define JAVA_CLASSES_H_
23
24 #include <jni.h>
25
26 #include <string>
27
28 #define PACKAGE_NAME "org/iotivity/service"
29
30 #define CLS_NAME_VALUE PACKAGE_NAME "/RcsValue"
31
32 #define CLS_NAME_RESOURCEATTRIBUTES PACKAGE_NAME "/RcsResourceAttributes"
33 #define CLS_NAME_REMOTERESOURCEOBJECT PACKAGE_NAME "/client/RcsRemoteResourceObject"
34 #define CLS_NAME_RESOURCEBYTESTRING PACKAGE_NAME "/RcsByteString"
35
36 #define CLS_NAME_OBJECT "java/lang/Object"
37 #define CLS_NAME_STRING "java/lang/String"
38 #define CLS_NAME_INTEGER "java/lang/Integer"
39 #define CLS_NAME_DOUBLE "java/lang/Double"
40 #define CLS_NAME_BOOLEAN "java/lang/Boolean"
41
42 #define CLS_NAME_COLLECTION "java/util/Collection"
43 #define CLS_NAME_ARRAY_LIST "java/util/ArrayList"
44 #define CLS_NAME_SET "java/util/Set"
45 #define CLS_NAME_MAP "java/util/Map"
46 #define CLS_NAME_MAP_ENTRY "java/util/Map$Entry"
47 #define CLS_NAME_ITERATOR "java/util/Iterator"
48
49 #define EXC_NAME_RCS PACKAGE_NAME "/RcsException"
50 #define EXC_NAME_PLATFORM PACKAGE_NAME "/RcsPlatformException"
51 #define EXC_NAME_ILLEGAL_STATE PACKAGE_NAME "/RcsIllegalStateException"
52
53 #define AS_SIG(CLS_NAME) "L" CLS_NAME ";"
54
55 class JNIEnvWrapper;
56
57 extern jclass g_cls_Integer;
58 extern jclass g_cls_Double;
59 extern jclass g_cls_Boolean;
60 extern jclass g_cls_String;
61
62 extern jclass g_cls_ArrayList;
63 extern jclass g_cls_Set;
64 extern jclass g_cls_Map;
65 extern jclass g_cls_MapEntry;
66 extern jclass g_cls_Iterator;
67
68 extern jmethodID g_method_Boolean_booleanValue;
69 extern jmethodID g_method_Integer_intValue;
70 extern jmethodID g_method_Double_doubleValue;
71
72 extern jmethodID g_method_Collection_add;
73
74 extern jmethodID g_method_Set_iterator;
75
76 extern jmethodID g_method_Map_entrySet;
77 extern jmethodID g_method_Map_put;
78
79 extern jmethodID g_method_MapEntry_getKey;
80 extern jmethodID g_method_MapEntry_getValue;
81
82 extern jmethodID g_method_Iterator_hasNext;
83 extern jmethodID g_method_Iterator_next;
84
85 extern jmethodID g_ctor_Boolean;
86 extern jmethodID g_ctor_Integer;
87 extern jmethodID g_ctor_Double;
88
89 extern jmethodID g_ctor_ArrayList;
90
91 void initJavaClasses(JNIEnvWrapper*);
92 void clearJavaClasses(JNIEnvWrapper*);
93
94 template< typename ENV >
95 inline jobject newBooleanObject(ENV* env, bool value)
96 {
97     return env->NewObject(g_cls_Boolean, g_ctor_Boolean, value);
98 }
99
100 template< typename ENV >
101 inline jobject newIntegerObject(ENV* env, int value)
102 {
103     return env->NewObject(g_cls_Integer, g_ctor_Integer, value);
104 }
105
106 template< typename ENV >
107 inline jobject newDoubleObject(ENV* env, double value)
108 {
109     return env->NewObject(g_cls_Double, g_ctor_Double, value);
110 }
111
112 template< typename ENV >
113 inline jstring newStringObject(ENV* env, const std::string& value)
114 {
115     return env->NewStringUTF(value.c_str());
116 }
117
118 template< typename ENV >
119 inline jstring newStringObjectCstr(ENV* env, const char* value)
120 {
121     return env->NewStringUTF(value);
122 }
123
124 template< typename ENV >
125 inline std::string toStdString(ENV* env, jstring obj)
126 {
127     if (!obj) return "";
128
129     auto cstr = env->GetStringUTFChars(obj, nullptr);
130
131     if (!cstr) return "";
132
133     std::string result{ cstr };
134
135     env->ReleaseStringUTFChars(obj, cstr);
136
137     return result;
138 }
139
140 template< typename ENV >
141 inline jobject newArrayList(ENV* env)
142 {
143     return env->NewObject(g_cls_ArrayList, g_ctor_ArrayList);
144 }
145
146 template< typename ENV >
147 inline bool invoke_Boolean_booleanValue(ENV* env, jobject obj)
148 {
149     return env->CallBooleanMethod(obj, g_method_Boolean_booleanValue);
150 }
151
152 template< typename ENV >
153 inline int invoke_Integer_intValue(ENV* env, jobject obj)
154 {
155     return env->CallIntMethod(obj, g_method_Integer_intValue);
156 }
157
158 template< typename ENV >
159 inline double invoke_Double_doubleValue(ENV* env, jobject obj)
160 {
161     return env->CallDoubleMethod(obj, g_method_Double_doubleValue);
162 }
163
164 template< typename ENV >
165 inline jboolean invoke_Collection_add(ENV* env, jobject collectionObj, jobject valueObj)
166 {
167     return env->CallBooleanMethod(collectionObj, g_method_Collection_add, valueObj);
168 }
169
170 template< typename ENV >
171 inline jobject invoke_Map_entrySet(ENV* env, jobject mapObj)
172 {
173     return env->CallObjectMethod(mapObj, g_method_Map_entrySet);
174 }
175
176 template< typename ENV >
177 inline jobject invoke_Map_put(ENV* env, jobject mapObj, jobject keyObj, jobject valueObj)
178 {
179     return env->CallObjectMethod(mapObj, g_method_Map_put, keyObj, valueObj);
180 }
181
182 template< typename ENV >
183 inline jobject invoke_MapEntry_getKey(ENV* env, jobject entryObj)
184 {
185     return env->CallObjectMethod(entryObj, g_method_MapEntry_getKey);
186 }
187
188 template< typename ENV >
189 inline jobject invoke_MapEntry_getValue(ENV* env, jobject entryObj)
190 {
191     return env->CallObjectMethod(entryObj, g_method_MapEntry_getValue);
192 }
193
194 template< typename ENV >
195 inline jobject invoke_Set_iterator(ENV* env, jobject setObj)
196 {
197     return env->CallObjectMethod(setObj, g_method_Set_iterator);
198 }
199
200 template< typename ENV >
201 inline bool invoke_Iterator_hasNext(ENV* env, jobject iterObj)
202 {
203     return env->CallBooleanMethod(iterObj, g_method_Iterator_hasNext);
204 }
205
206 template< typename ENV >
207 inline jobject invoke_Iterator_next(ENV* env, jobject iterObj)
208 {
209     return env->CallObjectMethod(iterObj, g_method_Iterator_next);
210 }
211
212 #endif // JAVA_CLASSES_H_