Bug fixes.
[platform/upstream/iotivity.git] / service / notification / android / notification-service / src / main / jni / provider / JniNotificationProvider.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 7b1f9b3..3e96fe5
@@ -20,8 +20,9 @@
 
 #include "JniNotificationProvider.h"
 #include "NSProviderService.h"
+#include "JniOcRepresentation.h"
 
-static JavaVM *g_jvm = NULL;
+static JavaVM *g_jvm_provider = NULL;
 
 static jobject g_obj_subscriptionListener = NULL;
 static jobject g_obj_syncListener = NULL;
@@ -35,18 +36,20 @@ jclass g_cls_MediaContents;
 jclass g_cls_Topic;
 jclass g_cls_TopicsList;
 jclass g_cls_TopicState;
+jclass g_cls_OcRepresentation;
+jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;
 
 static JNIEnv *GetJNIEnv(jint *ret)
 {
     JNIEnv *env = NULL;
 
-    *ret = g_jvm->GetEnv((void **) &env, JNI_CURRENT_VERSION);
+    *ret = g_jvm_provider->GetEnv((void **) &env, JNI_CURRENT_VERSION);
     switch (*ret)
     {
         case JNI_OK:
             return env;
         case JNI_EDETACHED:
-            if (g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK)
+            if (g_jvm_provider->AttachCurrentThread(&env, NULL) != JNI_OK)
             {
                 LOGE ("Failed to get the environment");
                 return NULL;
@@ -121,10 +124,10 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg)
         LOGE("Error: jfieldID for message ttl is null");
         return nullptr;
     }
-    jlong jttl = (jlong) env->GetObjectField( jMsg, fid_ttl);
-    uint64_t  ttl = jttl;
 
-    LOGD("Message ID: %lld\n", ttl);
+    jlong jttl = (jlong) env->GetLongField( jMsg, fid_ttl);
+    uint64_t  ttl = jttl;
+    LOGD("TTL: %d\n", ttl);
 
     // Message Title
     jfieldID fid_title = env->GetFieldID( cls, "mTitle", "Ljava/lang/String;");
@@ -211,38 +214,85 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg)
         return nullptr;
     }
     jobject jmedia = env->GetObjectField( jMsg, fid_media);
+    OIC::Service::NSMediaContents *media = nullptr;
     if (jmedia == NULL)
     {
-        LOGE("Error: jmedia object of MediaContents inside Message is null");
-        return nullptr;
+        LOGD("Info: jmedia object of MediaContents inside Message is null");
     }
-    jclass cls_MediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));
-    if (!cls_MediaContents)
+    else
     {
-        LOGE ("Failed to Get ObjectClass for class MediaContents");
-        return nullptr;
+        jclass cls_MediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));
+        if (!cls_MediaContents)
+        {
+            LOGE ("Failed to Get ObjectClass for class MediaContents");
+            return nullptr;
+        }
+        jfieldID fid_icon = env->GetFieldID( cls_MediaContents, "mIconImage", "Ljava/lang/String;");
+        if (fid_icon == NULL)
+        {
+            LOGE("Error: jfieldID for iconImage is null");
+            return nullptr;
+        }
+        jstring jiconImage = (jstring)env->GetObjectField( jmedia, fid_icon);
+        const char *iconImage = "";
+        if (jiconImage)
+        {
+            iconImage = env->GetStringUTFChars( jiconImage, NULL);
+            media = new OIC::Service::NSMediaContents(std::string(iconImage));
+            env->ReleaseStringUTFChars(jiconImage, iconImage);
+        }
+        else
+        {
+            LOGD("Info: iconImage is null");
+        }
+        env->DeleteLocalRef(cls_MediaContents);
+        LOGD("iconImage: %s\n", iconImage);
     }
-    jfieldID fid_icon = env->GetFieldID( cls_MediaContents, "mIconImage", "Ljava/lang/String;");
-    if (fid_icon == NULL)
+
+    // Message ExtraInfo
+    jfieldID fid_extraInfo = env->GetFieldID( cls, "mExtraInfo",
+                             "Lorg/iotivity/base/OcRepresentation;");
+    if (fid_extraInfo == NULL)
     {
-        LOGE("Error: jfieldID for iconImage is null");
+        LOGE("Error: jfieldID for mExtraInfo is null");
         return nullptr;
     }
-    jstring jiconImage = (jstring)env->GetObjectField( jmedia, fid_icon);
-    const char *iconImage = "";
-    if (jiconImage)
+    jobject jExtraInfo = env->GetObjectField( jMsg, fid_extraInfo);
+    OC::OCRepresentation *representation = nullptr;
+    if (jExtraInfo == NULL)
     {
-        iconImage = env->GetStringUTFChars( jiconImage, NULL);
+        LOGE("Error: jExtraInfo object of Message is null");
     }
     else
     {
-        LOGD("Info: iconImage is null");
+        representation = GetHandle<OC::OCRepresentation>(env, jExtraInfo);
+        if (env->ExceptionCheck())
+        {
+            LOGE("Failed to get native handle from OcRepresentation");
+        }
+        if (!representation)
+        {
+            LOGE("Failed to get native object OcRepresentation");
+        }
     }
 
-    LOGD("iconImage: %s\n", iconImage);
-
-    OIC::Service::NSMediaContents *media = new OIC::Service::NSMediaContents(std::string(iconImage));
-    OIC::Service::NSMessage *nsMsg = OIC::Service::NSProviderService::getInstance()->CreateMessage();
+    OIC::Service::NSMessage *nsMsg;
+    jfieldID nativeHandle = env->GetFieldID(cls, "mNativeHandle", "J");
+    if (!nativeHandle)
+    {
+        LOGE("Error: fieldID for mNativeHandle is null");
+        return nullptr;
+    }
+    jlong jMessage = env->GetLongField(jMsg, nativeHandle);
+    if (jMessage)
+    {
+        LOGD ("calling sendMessage on mNativeHandle");
+        nsMsg = (OIC::Service::NSMessage *) (jMessage);
+    }
+    else
+    {
+        nsMsg = OIC::Service::NSProviderService::getInstance()->createMessage();
+    }
 
     nsMsg->setType(type);
     nsMsg->setTime(std::string(time));
@@ -250,11 +300,17 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg)
     nsMsg->setTitle(std::string(messageTitle));
     nsMsg->setContentText(std::string(messageBody));
     nsMsg->setSourceName(std::string(messageSource));
-    nsMsg->setMediaContents(media);
+    if(media != nullptr)
+    {
+        nsMsg->setMediaContents(media);
+    }
     nsMsg->setTopic(std::string(topic));
+    if (representation != nullptr)
+    {
+        nsMsg->setExtraInfo(*representation);
+    }
 
     env->DeleteLocalRef(cls_messageType);
-    env->DeleteLocalRef(cls_MediaContents);
 
     if (jtime)
     {
@@ -276,10 +332,6 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg)
     {
         env->ReleaseStringUTFChars(jtopic, topic);
     }
-    if (jiconImage)
-    {
-        env->ReleaseStringUTFChars(jiconImage, iconImage);
-    }
 
     LOGD("JNIProviderService: getMessage - OUT");
     return nsMsg;
@@ -456,6 +508,31 @@ jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage *message)
         env->SetObjectField(obj_message, fid_type, jType);
     }
 
+    LOGD("Reading OCRepresentation Object from Native");
+    OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message->getExtraInfo());
+    jlong handle = reinterpret_cast<jlong>(ocRepresentation);
+    jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,
+                              handle, true);
+    if (!jRepresentation)
+    {
+        LOGE("Failed to create OcRepresentation");
+        delete ocRepresentation;
+    }
+    else
+    {
+        LOGD("Created OCRepresentation Object from Native");
+    }
+    jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo",
+                             "Lorg/iotivity/base/OcRepresentation;");
+    if (!fid_extraInfo)
+    {
+        LOGE("Failed to get mExtraInfo for Message");
+        delete ocRepresentation;
+        return NULL;
+    }
+    LOGD ("setting extraInfo field");
+    env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);
+
     env->DeleteLocalRef(cls_message);
     LOGD ("JNIProviderService: getJavaMessage - OUT");
     return obj_message;
@@ -473,30 +550,27 @@ jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsSta
         return NULL;
     }
 
-    jobject obj_topicState;
     switch (nsState)
     {
         case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED:
             {
                 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
                                           "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
-                obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID);
+                return env->GetStaticObjectField(cls_topicState, fieldID);
             }
         case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED:
             {
                 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
                                           "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
-                obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID);
+                return env->GetStaticObjectField(cls_topicState, fieldID);
             }
+        default:
+            return NULL;
 
     }
-    if (obj_topicState == NULL)
-    {
-        LOGE("Error: object of field  TopicState  is null");
-    }
-    env->DeleteLocalRef(cls_topicState);
+
     LOGD("JNIProviderService: getJavaTopicState - OUT");
-    return obj_topicState;
+    return NULL;
 }
 
 jobject getJavaTopicsList(JNIEnv *env, OIC::Service::NSTopicsList *topicList)
@@ -550,38 +624,32 @@ jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType
         LOGE ("Failed to Get ObjectClass for SyncType");
         return NULL;
     }
-    jobject syncType;
     switch (nsType)
     {
         case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD:
             {
                 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
                                           "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
-                syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
+                return env->GetStaticObjectField(cls_SyncType, fieldID);
             }
         case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ :
             {
                 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
                                           "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
-                syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
+                return env->GetStaticObjectField(cls_SyncType, fieldID);
             }
         case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED :
             {
                 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
                                           "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
-                syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
+                return env->GetStaticObjectField(cls_SyncType, fieldID);
             }
-
-    }
-
-    if (syncType == NULL)
-    {
-        LOGE("Error: object of field  Synctype  is null");
+        default:
+            return NULL;
     }
 
-    env->DeleteLocalRef(cls_SyncType);
     LOGD ("JNIProviderService: getJavaSyncType - OUT");
-    return syncType;
+    return NULL;
 }
 
 
@@ -597,7 +665,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!jSubscriptionListener)
     {
         LOGE ("Failed to Get jSubscriptionListener");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -609,7 +677,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!cls_consumer)
     {
         LOGE ("Failed to Get ObjectClass for Consumer");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -620,7 +688,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!mid_consumer)
     {
         LOGE ("Failed to Get MethodID for Consumer<init>");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
     jobject obj_consumer = env->NewObject( cls_consumer, mid_consumer, jConsumerId);
@@ -629,7 +697,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!cls)
     {
         LOGE("Failed to Get ObjectClass of jSubscriptionListener");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
     jmethodID mid = env->GetMethodID(
@@ -639,14 +707,14 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!mid)
     {
         LOGE("Failed to Get MethodID of onConsumerSubscribed");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
 
     env->CallVoidMethod( jSubscriptionListener, mid, obj_consumer);
     env->DeleteLocalRef(jSubscriptionListener);
     env->DeleteLocalRef(cls_consumer);
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+    if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
     LOGD("JNIProviderService_onSubscribeListenerCb - OUT");
     return;
 }
@@ -663,7 +731,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!jSyncListener)
     {
         LOGE ("Failed to Get jSyncListener");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -676,14 +744,14 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!syncType)
     {
         LOGE ("Failed to Get syncType for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
     jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));
     if (!cls_SyncInfo)
     {
         LOGE ("Failed to Get ObjectClass for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
     jmethodID mid_syncInfo = env->GetMethodID(
@@ -693,7 +761,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!mid_syncInfo)
     {
         LOGE ("Failed to Get MethodID for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -702,7 +770,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!obj_syncInfo)
     {
         LOGE ("Failed to Get Object for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -710,24 +778,24 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!cls)
     {
         LOGE("Failed to Get ObjectClass");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
     jmethodID mid = env->GetMethodID(
                         cls,
-                        "onSyncInfoReceived",
+                        "onMessageSynchronized",
                         "(Lorg/iotivity/service/ns/common/SyncInfo;)V");
     if (!mid)
     {
         LOGE("Failed to Get MethodID");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
     env->CallVoidMethod( jSyncListener, mid, obj_syncInfo);
 
     env->DeleteLocalRef(jSyncListener);
     env->DeleteLocalRef(cls_SyncInfo);
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+    if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
 
     LOGD("JNIProviderService: OnSyncInfoListenerCb - OUT");
     return;
@@ -735,7 +803,8 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
 }
 
 JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeStart
-(JNIEnv *env, jobject jObj, jboolean jPolicy, jobject jSubscriptionListener, jobject jSyncListener)
+(JNIEnv *env, jobject jObj, jobject jSubscriptionListener, jobject jSyncListener,
+ jboolean jPolicy, jstring jUserInfo, jboolean jResourceSecurity)
 {
     LOGD("JNIProviderService: nativeStart - IN");
     if (!jSubscriptionListener || !jSyncListener)
@@ -762,9 +831,16 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     OIC::Service::NSProviderService::ProviderConfig cfg;
     cfg.m_subscribeRequestCb =  onSubscribeListenerCb;
     cfg.m_syncInfoCb =  onSyncInfoListenerCb;
-    cfg.policy = (bool) jPolicy;
+    cfg.subControllability = (bool) jPolicy;
+    if (!jUserInfo)
+    {
+        const char *info = env->GetStringUTFChars( jUserInfo, NULL);
+        std::string userInfo(info);
+        cfg.userInfo = userInfo;
+    }
+    cfg.resourceSecurity = (bool) jResourceSecurity;
 
-    OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->Start(cfg);
+    OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->start(cfg);
     if (result != OIC::Service::NSResult::OK)
     {
         LOGE("Fail to start NSProviderService");
@@ -780,7 +856,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
 {
     LOGD("JNIProviderService: nativeStop - IN");
 
-    OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->Stop();
+    OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->stop();
     if (result !=  OIC::Service::NSResult::OK)
     {
         LOGD("Fail to stop NSProvider service");
@@ -813,7 +889,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
         return (jint) OIC::Service::NSResult::ERROR;
     }
 
-    OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->SendMessage(nsMsg);
+    OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->sendMessage(nsMsg);
     if (result !=  OIC::Service::NSResult::OK)
     {
         LOGD("Fail to send NSProvider Message");
@@ -826,7 +902,7 @@ JNIEXPORT void JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
 (JNIEnv *env, jobject jObj, jlong messageId , jint syncState)
 {
     LOGD("JNIProviderService: nativeSendSyncInfo - IN");
-    OIC::Service::NSProviderService::getInstance()->SendSyncInfo( messageId,
+    OIC::Service::NSProviderService::getInstance()->sendSyncInfo( messageId,
             (OIC::Service::NSSyncInfo::NSSyncType) syncState);
     LOGD("JNIProviderService: nativeSendSyncInfo - OUT");
     return;
@@ -836,15 +912,15 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_
 (JNIEnv *env, jobject jObj)
 {
     LOGD("JNIProviderService: nativeCreateMessage - IN");
-    OIC::Service::NSMessagemessage =
-                      OIC::Service::NSProviderService::getInstance()->CreateMessage();
-    if(message == nullptr)
+    OIC::Service::NSMessage *message =
+        OIC::Service::NSProviderService::getInstance()->createMessage();
+    if (message == nullptr)
     {
         ThrowNSException(NS_ERROR, "Couldn't get Native Message");
         return NULL;
     }
     jobject jMsg =  getJavaMessage(env, message);
-    if(!jMsg)
+    if (!jMsg)
     {
         ThrowNSException(NS_ERROR, "Couldn't create Java Message");
         return NULL;
@@ -853,8 +929,9 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_
     return jMsg;
 }
 
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService
-(JNIEnv *env,jobject jObj, jstring jstr)
+JNIEXPORT jint JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService
+(JNIEnv *env, jobject jObj, jstring jstr)
 {
     LOGD("JNIProviderService: nativeEnableRemoteService - IN");
     if (!jstr)
@@ -866,7 +943,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     const char *address = env->GetStringUTFChars( jstr, NULL);
     std::string servAddress(address);
     OIC::Service::NSResult result  =
-        OIC::Service::NSProviderService::getInstance()->EnableRemoteService(
+        OIC::Service::NSProviderService::getInstance()->enableRemoteService(
             servAddress);
     if (result !=  OIC::Service::NSResult::OK)
     {
@@ -877,8 +954,9 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     return (jint) result;
 }
 
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService
-(JNIEnv *env,jobject jObj, jstring jstr)
+JNIEXPORT jint JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService
+(JNIEnv *env, jobject jObj, jstring jstr)
 {
     LOGD("JNIProviderService: nativeDisableRemoteService - IN");
     if (!jstr)
@@ -890,7 +968,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     const char *address = env->GetStringUTFChars( jstr, NULL);
     std::string servAddress(address);
     OIC::Service::NSResult result  =
-        OIC::Service::NSProviderService::getInstance()->DisableRemoteService(
+        OIC::Service::NSProviderService::getInstance()->disableRemoteService(
             servAddress);
     if (result !=  OIC::Service::NSResult::OK)
     {
@@ -901,10 +979,10 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     return (jint) result;
 }
 
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeAddTopic
+JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeRegisterTopic
 (JNIEnv *env, jobject jObj, jstring jTopicName)
 {
-    LOGD("JNIProviderService: nativeAddTopic - IN");
+    LOGD("JNIProviderService: nativeRegisterTopic - IN");
     if (!jTopicName)
     {
         ThrowNSException(NS_ERROR, "Topic Name Can't be NULL");
@@ -912,20 +990,20 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     }
     const char *name = env->GetStringUTFChars( jTopicName, NULL);
     std::string topicName(name);
-    OIC::Service::NSResult result  = OIC::Service::NSProviderService::getInstance()->AddTopic(
+    OIC::Service::NSResult result  = OIC::Service::NSProviderService::getInstance()->registerTopic(
                                          topicName);
     if (result !=  OIC::Service::NSResult::OK)
     {
-        LOGE("Fail to Add Topic");
+        LOGE("Fail to Register Topic");
     }
     env->ReleaseStringUTFChars(jTopicName, name);
-    LOGD("JNIProviderService: nativeAddTopic - OUT");
+    LOGD("JNIProviderService: nativeRegisterTopic - OUT");
     return (jint) result;
 }
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeDeleteTopic
+JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeUnregisterTopic
 (JNIEnv *env, jobject jObj, jstring jTopicName)
 {
-    LOGD("JNIProviderService: nativeDeleteTopic - IN");
+    LOGD("JNIProviderService: nativeUnregisterTopic - IN");
     if (!jTopicName)
     {
         ThrowNSException(NS_ERROR, "Topic Name Can't be NULL");
@@ -933,24 +1011,25 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     }
     const char *name = env->GetStringUTFChars( jTopicName, NULL);
     std::string topicName(name);
-    OIC::Service::NSResult result  = OIC::Service::NSProviderService::getInstance()->DeleteTopic(
+    OIC::Service::NSResult result  = OIC::Service::NSProviderService::getInstance()->unregisterTopic(
                                          topicName);
     if (result !=  OIC::Service::NSResult::OK)
     {
-        LOGE("Fail to Add Topic");
+        LOGE("Fail to Unregister Topic");
     }
     env->ReleaseStringUTFChars(jTopicName, name);
-    LOGD("JNIProviderService: nativeDeleteTopic - OUT");
+    LOGD("JNIProviderService: nativeUnregisterTopic - OUT");
     return (jint) result;
 }
 
-JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeGetTopics
+JNIEXPORT jobject JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeGetRegisteredTopicList
 (JNIEnv *env, jobject jObj)
 {
-    LOGD("JNIProviderService: nativeGetTopics - IN");
+    LOGD("JNIProviderService: nativeGetRegisteredTopicList - IN");
 
     OIC::Service::NSTopicsList *topicList  =
-        OIC::Service::NSProviderService::getInstance()->GetTopics();
+        OIC::Service::NSProviderService::getInstance()->getRegisteredTopicList();
     if (topicList == nullptr)
     {
         ThrowNSException(NS_ERROR, "Topic List doesn't exist");
@@ -959,56 +1038,36 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_
 
     jobject obj_topicList = getJavaTopicsList(env, topicList);
 
-    LOGD("JNIProviderService: nativeGetTopics - OUT");
+    LOGD("JNIProviderService: nativeGetRegisteredTopicList - OUT");
     return obj_topicList;
 }
 
 JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeAcceptSubscription
-(JNIEnv *env,  jobject jObj, jobject jConsumer, jboolean jAccepted)
+(JNIEnv *env,  jobject jObj, jstring jConsumerId, jboolean jAccepted)
 {
     LOGD("JNIProviderService: nativeAcceptSubscription - IN");
-
-    jclass consumerClass =  env->GetObjectClass( jConsumer);
-    if (!consumerClass)
-    {
-        ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Consumer");
-        return (jint) OIC::Service::NSResult::ERROR;
-    }
-
-    // Consumer ID
-    jfieldID fid_id =  env->GetFieldID(consumerClass, "mConsumerId",  "Ljava/lang/String;");
-    if (fid_id == NULL)
-    {
-        LOGE("Error: jfieldID for mConsumerId  is null");
-        ThrowNSException(NS_ERROR, "ConsumerId not found");
-        return (jint) OIC::Service::NSResult::ERROR;
-    }
-
-    jstring jconId = (jstring)env->GetObjectField( jConsumer, fid_id);
-    if (!jconId)
+    if (!jConsumerId)
     {
-        ThrowNSException(NS_ERROR, "ProviderId cannot be null");
+        ThrowNSException(NS_ERROR, "ConsumerId Can't be NULL");
         return (jint) OIC::Service::NSResult::ERROR;
     }
-    const char *conId = env->GetStringUTFChars( jconId, NULL);
-    std::string consumerId(conId);
-    env->ReleaseStringUTFChars(jconId, conId);
-
+    const char *id = env->GetStringUTFChars( jConsumerId, NULL);
+    std::string consumerId(id);
     LOGD("Consumer ID: %s\n", consumerId.c_str());
 
     OIC::Service::NSConsumer *consumer =
         OIC::Service::NSProviderService::getInstance()->getConsumer(consumerId);
     if (consumer)
-        return (jint) consumer->acceptSubscription(consumer,  (bool)jAccepted);
+        return (jint) consumer->acceptSubscription((bool)jAccepted);
 
     LOGE("Couldn't find consumer");
     LOGD("JNIProviderService: nativeAcceptSubscription - OUT");
     return (jint) OIC::Service::NSResult::ERROR;
 }
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSelectTopic
+JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSetConsumerTopic
 (JNIEnv *env, jobject jObj, jstring jConsumerId, jstring jTopicName)
 {
-    LOGD("JNIProviderService: nativeSelectTopic - IN");
+    LOGD("JNIProviderService: nativeSetConsumerTopic - IN");
     if (!jConsumerId || !jTopicName)
     {
         ThrowNSException(NS_ERROR, "Topic Name or ConsumerId Can't be NULL");
@@ -1025,7 +1084,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSele
         ThrowNSException(NS_ERROR, "Consumer does exists");
         return (jint) OIC::Service::NSResult::ERROR;
     }
-    OIC::Service::NSResult result  = nsConsumer->selectTopic(topicName);
+    OIC::Service::NSResult result  = nsConsumer->setTopic(topicName);
 
     if (result !=  OIC::Service::NSResult::OK)
     {
@@ -1033,13 +1092,13 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeSele
     }
     env->ReleaseStringUTFChars(jTopicName, name);
     env->ReleaseStringUTFChars(jConsumerId, id);
-    LOGD("JNIProviderService: nativeSelectTopic - OUT");
+    LOGD("JNIProviderService: nativeSetConsumerTopic - OUT");
     return (jint) result;
 }
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnselectTopic
+JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnsetConsumerTopic
 (JNIEnv *env, jobject jObj, jstring jConsumerId, jstring jTopicName)
 {
-    LOGD("JNIProviderService: nativeUnselectTopic - IN");
+    LOGD("JNIProviderService: nativeUnsetConsumerTopic - IN");
     if (!jConsumerId || !jTopicName)
     {
         ThrowNSException(NS_ERROR, "Topic Name or ConsumerId Can't be NULL");
@@ -1056,7 +1115,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnse
         ThrowNSException(NS_ERROR, "Consumer does exists");
         return (jint) OIC::Service::NSResult::ERROR;
     }
-    OIC::Service::NSResult result  = nsConsumer->unselectTopic(topicName);
+    OIC::Service::NSResult result  = nsConsumer->unsetTopic(topicName);
 
     if (result !=  OIC::Service::NSResult::OK)
     {
@@ -1064,14 +1123,14 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeUnse
     }
     env->ReleaseStringUTFChars(jTopicName, name);
     env->ReleaseStringUTFChars(jConsumerId, id);
-    LOGD("JNIProviderService: nativeUnselectTopic - OUT");
+    LOGD("JNIProviderService: nativeUnsetConsumerTopic - OUT");
     return (jint) result;
 }
 
-JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeGetConsumerTopics
+JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeGetConsumerTopicList
 (JNIEnv *env, jobject jObj, jstring jConsumerId)
 {
-    LOGD("JNIProviderService: nativeGetConsumerTopics - IN");
+    LOGD("JNIProviderService: nativeGetConsumerTopicList - IN");
     if (!jConsumerId)
     {
         ThrowNSException(NS_ERROR, "Topic Name or ConsumerId Can't be NULL");
@@ -1087,14 +1146,14 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeG
         return NULL;
     }
     env->ReleaseStringUTFChars(jConsumerId, id);
-    OIC::Service::NSTopicsList *topicList  = nsConsumer->getConsumerTopics();
+    OIC::Service::NSTopicsList *topicList  = nsConsumer->getConsumerTopicList();
     if (topicList == nullptr)
     {
         ThrowNSException(NS_ERROR, "Topic List doesn't exist");
         return NULL;
     }
     jobject obj_topicList = getJavaTopicsList(env, topicList);
-    LOGD("JNIProviderService: nativeGetConsumerTopics - OUT");
+    LOGD("JNIProviderService: nativeGetConsumerTopicList - OUT");
     return obj_topicList;
 }
 
@@ -1102,7 +1161,7 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeG
 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
 {
     LOGD("ProviderService_JNI_OnLoad");
-    g_jvm = jvm;
+    g_jvm_provider = jvm;
 
     JNIEnv *env;
     if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
@@ -1237,6 +1296,27 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
         return JNI_ERR;
     }
 
+    //OcRepresentation
+    jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation");
+    if (!localOcRepresentation)
+    {
+        LOGE("Failed to get local OcRepresentation class");
+        return JNI_ERR;
+    }
+    g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation);
+    if (!g_cls_OcRepresentation)
+    {
+        LOGE("Failed to set Global OcRepresentation reference");
+        return JNI_ERR;
+    }
+
+    g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");
+    if (!g_mid_OcRepresentation_N_ctor_bool)
+    {
+        LOGE("Failed to get Global OcRepresentation Constructor reference");
+        return JNI_ERR;
+    }
+
     env->DeleteLocalRef(localMessage);
     env->DeleteLocalRef(localMessageType);
     env->DeleteLocalRef(localConsumer);
@@ -1246,6 +1326,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
     env->DeleteLocalRef(localTopic);
     env->DeleteLocalRef(localTopicsList);
     env->DeleteLocalRef(localTopicState);
+    env->DeleteLocalRef(localOcRepresentation);
 
     return NSExceptionInit(env);
 }
@@ -1270,4 +1351,5 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
     env->DeleteGlobalRef(g_cls_Topic);
     env->DeleteGlobalRef(g_cls_TopicsList);
     env->DeleteGlobalRef(g_cls_TopicState);
+    env->DeleteGlobalRef(g_cls_OcRepresentation);
 }