Imported Upstream version 1.0.1
[platform/upstream/iotivity.git] / service / simulator / java / jni / simulator_device_info_jni.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
21 #include "simulator_device_info_jni.h"
22 #include "simulator_common_jni.h"
23
24 extern SimulatorClassRefs gSimulatorClassRefs;
25 jobject JDeviceInfo::toJava(DeviceInfo &deviceInfo)
26 {
27     if (!m_env)
28         return nullptr;
29
30     jmethodID deviceInfoMId = m_env->GetMethodID(gSimulatorClassRefs.classDeviceInfo, "<init>", "(V)V");
31     if (!deviceInfoMId)
32         return nullptr;
33
34     jobject jDeviceInfo = (jobject) m_env->NewObject(gSimulatorClassRefs.classDeviceInfo, deviceInfoMId);
35     if (!jDeviceInfo)
36         return nullptr;
37
38     setFieldValue(jDeviceInfo, "mName", deviceInfo.getName());
39     setFieldValue(jDeviceInfo, "mID", deviceInfo.getID());
40     setFieldValue(jDeviceInfo, "mSpecVersion", deviceInfo.getSpecVersion());
41     setFieldValue(jDeviceInfo, "mDMVVersion", deviceInfo.getDataModelVersion());
42
43     return jDeviceInfo;
44 }
45
46 void JDeviceInfo::setFieldValue(jobject jDeviceInfo, const std::string &fieldName,
47                                 const std::string &value)
48 {
49     jfieldID fieldID = m_env->GetFieldID(gSimulatorClassRefs.classDeviceInfo, fieldName.c_str(),
50                                          "Ljava/lang/String;");
51     jstring valueStr = m_env->NewStringUTF(value.c_str());
52     m_env->SetObjectField(jDeviceInfo, fieldID, valueStr);
53 }
54
55 void JniDeviceInfoListener::onDeviceInfoReceived(DeviceInfo &deviceInfo)
56 {
57     // Get the environment
58     JNIEnv *env = getEnv();
59     if (!env)
60         return;
61
62     jobject listener = env->NewLocalRef(m_listener);
63     if (!listener)
64     {
65         releaseEnv();
66         return;
67     }
68
69     jclass listenerCls = env->GetObjectClass(listener);
70     if (!listenerCls)
71     {
72         releaseEnv();
73         return;
74     }
75
76     jmethodID listenerMId = env->GetMethodID(listenerCls, "onDeviceFound",
77                             "(Lorg/oic/simulator/DeviceInfo;)V");
78     if (!listenerMId)
79     {
80         releaseEnv();
81         return;
82     }
83
84     // Convert CPP to Java DeviceInfo object
85     jobject jDeviceInfo = JDeviceInfo(env).toJava(deviceInfo);
86     if (!jDeviceInfo)
87     {
88         releaseEnv();
89         return;
90     }
91
92     // Invoke java listener with DeviceInfo
93     env->CallVoidMethod(listener, listenerMId, jDeviceInfo);
94     if (env->ExceptionCheck())
95     {
96         releaseEnv();
97         return;
98     }
99
100     releaseEnv();
101 }
102