Add APIs of cloud provisioning for Android and JNI layer
[platform/upstream/iotivity.git] / service / easy-setup / mediator / richsdk / android / jni / JniRemoteEnrollee.cpp
1 /******************************************************************
2  *
3  * Copyright 2016 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 "JniRemoteEnrollee.h"
22
23 using namespace OIC::Service;
24
25 JniRemoteEnrollee::JniRemoteEnrollee(std::shared_ptr<RemoteEnrollee> remoteEnrollee)
26     : m_sharedResource(remoteEnrollee) {}
27
28 JniRemoteEnrollee::~JniRemoteEnrollee()
29 {
30     LOGD("JniRemoteEnrollee::~JniRemoteEnrollee()");
31     m_sharedResource = NULL;
32
33     jint envRet;
34     JNIEnv *env = GetESJNIEnv(envRet);
35     if (NULL == env) return;
36
37     if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
38 }
39
40 JniRemoteEnrollee *JniRemoteEnrollee::getJniRemoteEnrollee(JNIEnv *env, jobject thiz)
41 {
42     JniRemoteEnrollee *remoteEnrollee = ESGetHandle<JniRemoteEnrollee>(env, thiz);
43     if (env->ExceptionCheck())
44     {
45         LOGE("getJniRemoteEnrollee :: Failed to get native handle from RemoteEnrollee object");
46     }
47     if (!remoteEnrollee)
48     {
49         LOGE("getJniRemoteEnrollee :: no resource");
50     }
51     return remoteEnrollee;
52 }
53
54 JNIEXPORT void JNICALL
55 Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeSetCloudProvInfo
56 (JNIEnv *env, jobject jClass, jstring jauthCode, jstring jauthProvider, jstring jciServer)
57 {
58     LOGD("nativeSetCloudProvInfo Enter");
59
60     // TODO
61     JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
62     remoteEnrollee->setCloudProvInfo(env, jauthCode, jauthProvider, jciServer);
63
64     LOGD("nativeSetCloudProvInfo Exit");
65 }
66
67 JNIEXPORT void JNICALL
68 Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartCloudProvisioning
69 (JNIEnv *env, jobject jClass, jobject jListener)
70 {
71     LOGD("nativeStartCloudProvisioning Enter");
72
73     JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
74     remoteEnrollee->startCloudProvisioning(env, jListener);
75
76     LOGD("nativeStartCloudProvisioning Exit");
77 }
78
79 void JniRemoteEnrollee::setCloudProvInfo(JNIEnv *env, jstring jauthCode, jstring jauthProvider, jstring jciServer)
80 {
81     CloudProvInfo info;
82     info.authCode = env->GetStringUTFChars(jauthCode, NULL);
83     info.authProvider = env->GetStringUTFChars(jauthProvider, NULL);
84     info.ciServer = env->GetStringUTFChars(jciServer, NULL);
85
86     m_sharedResource->setCloudProvInfo(info);
87 }
88
89 void JniRemoteEnrollee::startCloudProvisioning(JNIEnv *env, jobject jListener)
90 {
91     JniCloudProvisioningStatusListener *onCloudProvisioningStatusReceived = addCloudProvisioningStatusListener(env,
92             jListener);
93
94     CloudProvStatusCb provisionStatusCallback = [onCloudProvisioningStatusReceived]
95             (std::shared_ptr< OIC::Service::CloudProvisioningStatus > cloudProvisioningStatus)
96
97     {
98         onCloudProvisioningStatusReceived->onCloudProvisioningStatus(cloudProvisioningStatus);
99     };
100
101     try
102     {
103         m_sharedResource->startCloudProvisioning(provisionStatusCallback);
104     }
105     catch (ESBadRequestException exception)
106     {
107         LOGE("JNI startProvisioning :: Exception occured");
108         //throw the exception to java
109         throwESException(env, exception.what());
110     }
111 }
112
113 JniCloudProvisioningStatusListener *JniRemoteEnrollee::addCloudProvisioningStatusListener(JNIEnv *env,
114         jobject jListener)
115 {
116     return this->m_cloudProvisioningStatus.addListener(env, jListener, this);
117 }
118
119 void JniRemoteEnrollee::removeCloudProvisioningStatusListener(JNIEnv *env, jobject jListener)
120 {
121     this->m_cloudProvisioningStatus.removeListener(env, jListener);
122 }
123