[PPM] Modify Protocol Plugin Manager for Android platform
authorYounghyun Joo <yh_.joo@samsung.com>
Mon, 2 Mar 2015 10:10:29 +0000 (19:10 +0900)
committerUze Choi <uzchoi@samsung.com>
Thu, 5 Mar 2015 06:53:32 +0000 (06:53 +0000)
1. Modify FelixAdapter for android support
2. Modify PluginManagerImpl to use FelixAdapter

Change-Id: I14481ddd75913e3eeddef00febd1e8f1c2476aef
Signed-off-by: Younghyun Joo <yh_.joo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/423
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: yunhee.hwang <yunhee.hwang@samsung.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/SConscript
service/protocol-plugin/plugin-manager/SConscript
service/protocol-plugin/plugin-manager/src/Config.cpp
service/protocol-plugin/plugin-manager/src/FelixAdapter.cpp
service/protocol-plugin/plugin-manager/src/FelixAdapter.h
service/protocol-plugin/plugin-manager/src/PluginManager.cpp
service/protocol-plugin/plugin-manager/src/PluginManagerImpl.cpp
service/protocol-plugin/plugin-manager/src/PluginManagerImpl.h
service/protocol-plugin/sample-app/linux/SConscript

index e8d873e..1ea7f78 100644 (file)
@@ -15,7 +15,7 @@ if target_os != 'arduino':
 
        # Build protocol plugin project
        # protocol-plugin use 'inotify', this feature isn't support by MAC OSX
-       if target_os not in ['darwin', 'ios', 'android']:
+       if target_os not in ['darwin', 'ios']:
                SConscript('protocol-plugin/SConscript')
 
        # Build notification manager project
index e2d0cf6..5f074fa 100644 (file)
@@ -1,7 +1,7 @@
 ##
 # plugin-manager project build script
 ##
-
+import os
 Import('env')
 
 # Add third party libraries
@@ -24,8 +24,8 @@ if target_os not in ['windows', 'winrt']:
                '-fpermissive', '-Wsign-compare'])
 
 if target_os == 'android':
-       plugin_manager_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
-       plugin_manager_env.AppendUnique(LIBS = ['boost_thread-gcc-mt-1_49', 'gnustl_static'])
+       plugin_manager_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions', '-DANDROID'])
+       plugin_manager_env.AppendUnique(LIBS = ['boost_thread', 'boost_system', 'gnustl_shared', 'log'])
 
 plugin_manager_env.AppendUnique(CPPDEFINES = ['CP_C_API=CP_EXPORT',
                                        'CP_HOST=\"\\"'+env.get('TARGET_OS')+'\\"\"',
@@ -48,11 +48,13 @@ ppm = plugin_manager_env.StaticLibrary('ppm', ppm_src)
 
 pmimpl_src = [
                'src/CpluffAdapter.cpp',
-               'src/FelixAdapter.cpp',
                'src/Plugin.cpp',
                'src/PluginManagerImpl.cpp',
                'src/Config.cpp']
 
+if target_os == 'android':
+       pmimpl_src += ['src/FelixAdapter.cpp']
+
 pmimpl_env = plugin_manager_env.Clone()
 pmimpl_env.PrependUnique(CCFLAGS = ['-fPIC'])
 pmimpl_env.PrependUnique(LIBS = File(env.get('BUILD_DIR') + '/libcpluff.a'))
index b8c5941..f09565e 100644 (file)
@@ -34,7 +34,7 @@ Config *Config::s_configinstance = NULL;
 
 Config::Config()
 {
-    if (loadConfigFile("./pluginmanager.xml") != PM_S_OK)
+    if (loadConfigFile("/storage/emulated/0/Download/pluginmanager.xml") != PM_S_OK)
     {
         fprintf(stderr, "PM Configuration file is not exist current Folder.\n" );
         exit(EXIT_FAILURE);
index 50a92e2..ae28ef5 100644 (file)
 /// @brief
 
 #include "FelixAdapter.h"
+#include <sstream>
 
 using namespace OIC;
 
 FelixAdapter *FelixAdapter::s_pinstance;
 
-FelixAdapter::FelixAdapter()
+FelixAdapter::FelixAdapter(JavaVM *args)
 {
+    jvm = args;
+
     config = Config::Getinstance();
     std::string pluginpath = config->getPluginPath();
     if (pluginpath != "")
@@ -38,7 +41,7 @@ FelixAdapter::FelixAdapter()
     }
     else
     {
-        fprintf(stderr, "Pluing path is not exist\n");
+        fprintf(stderr, "Pluin path does not exist\n");
         pluginpath = "";
     }
     registerAllPlugin(pluginpath);
@@ -46,7 +49,9 @@ FelixAdapter::FelixAdapter()
 
 FelixAdapter::~FelixAdapter(void)
 {
+
     s_pinstance->deleteinstance();
+    s_pinstance = NULL;
 }
 
 int FelixAdapter::installPlugin(const std::string path)
@@ -66,32 +71,166 @@ int FelixAdapter::loadPluginInfoToManager(const std::string path)
 
 int FelixAdapter::registerPlugin(const std::string path)
 {
-    return 1;
+    int flag = FALSE;
+
+    if (path == "")
+    {
+        printf("FelixAdapter path == null\n");
+        return flag;
+    }
+
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    jstring jpath = env->NewStringUTF(path.c_str());
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "registerPlugin", "(Ljava/lang/String;)I");
+
+    flag =  (int)env->CallStaticIntMethod(cls, mid, jpath);
+    return flag;
 }
 
 int FelixAdapter::registerAllPlugin(const std::string path)
 {
-    return 1;
+    int flag = FALSE;
+
+    if (path == "")
+    {
+        printf("FelixAdapter path == null\n");
+        return flag;
+    }
+
+
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    jstring jpath = env->NewStringUTF(path.c_str());
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "registerAllPlugin", "(Ljava/lang/String;)I");
+
+    flag = (int)env->CallStaticIntMethod(cls, mid, jpath);
+
+    return flag;
 }
 
 int FelixAdapter::unregisterPlugin(Plugin *const plugin)
 {
-    return 1;
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    const char *cpath = plugin->getID().c_str();
+    jstring jpath = env->NewStringUTF(cpath);
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "unregisterPlugin", "(Ljava/lang/String;)I");
+   
+    return (int)env->CallStaticIntMethod(cls, mid, jpath);
 }
 
 int FelixAdapter::unregisterAllPlugin(void)
 {
-    return 1;
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "unregisterAllPlugin", "()I");
+   
+    return (int)env->CallStaticIntMethod(cls, mid);
 }
 
 std::vector<Plugin> &FelixAdapter::getAllPlugins(void)
 {
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "getAllPlugins", "()[Lorg/osgi/framework/Bundle;");
+    jobjectArray jresultArray = (jobjectArray)env->CallStaticObjectMethod(cls, mid);
+    jint size = env->GetArrayLength(jresultArray);
+    m_plugins.clear();
+
+    for(int i = 0; i < (int)size; i++) {
+        Plugin *plugin = new Plugin;
+
+        jobject result = env->GetObjectArrayElement(jresultArray, i);
+        cls = env->GetObjectClass(result);
+        plugin->setValue("Language", "JAVA");
+        mid = env->GetMethodID(cls, "getSymbolicName", "()Ljava/lang/String;");
+        jstring jid = (jstring)env->CallObjectMethod(result, mid);
+        std::string id = env->GetStringUTFChars(jid, 0);
+        plugin->setValue("Id", id);
+        mid = env->GetMethodID(cls, "getVersion", "()Lorg/osgi/framework/Version;");
+        jobject jversion_object = env->CallObjectMethod(result, mid);
+        jclass vcls = env->GetObjectClass(jversion_object);
+        mid = env->GetMethodID(vcls, "toString", "()Ljava/lang/String;");
+        jstring jversion = (jstring)env->CallObjectMethod(jversion_object, mid);
+        std::string version = env->GetStringUTFChars(jversion, 0);
+        plugin->setValue("Version", version);
+        cls = env->FindClass("org/oic/android/FelixManager");
+        mid = env->GetStaticMethodID(cls, "getValue", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
+        std::string key = "Name";
+        jstring jname = (jstring)env->CallStaticObjectMethod(cls, mid, jid, env->NewStringUTF(key.c_str()));
+        std::string name = env->GetStringUTFChars(jname, 0);
+        plugin->setValue("Name", name);
+        key = "ResourceType";
+        jstring jresourcetype = (jstring)env->CallStaticObjectMethod(cls, mid, jid, env->NewStringUTF(key.c_str()));
+        std::string resourcetype = env->GetStringUTFChars(jresourcetype, 0);
+        //LOGD("ResourceType:");
+        plugin->setValue("ResourceType", resourcetype);
+        m_plugins.push_back(*plugin);
+    }
+
     return m_plugins;
 }
 
 std::vector<Plugin> *FelixAdapter::findPlugins(const std::string key, const std::string value)
 {
-    return nullptr;
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    jstring jkey = env->NewStringUTF(key.c_str());
+    jstring jvalue = env->NewStringUTF(value.c_str());
+
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "findPlugins", "(Ljava/lang/String;Ljava/lang/String;)[Lorg/osgi/framework/Bundle;");
+
+    jobjectArray jresultArray = (jobjectArray)env->CallStaticObjectMethod(cls, mid, (jstring)jkey, (jstring)jvalue);
+
+    jint size = env->GetArrayLength(jresultArray);
+    
+    std::vector<Plugin> *re_plugins;
+    re_plugins = new std::vector<Plugin>;
+
+    for(int i = 0; i < (int)size; i++) {
+        Plugin *plugin = new Plugin;
+
+                jobject result = env->GetObjectArrayElement(jresultArray, i);
+        cls = env->GetObjectClass(result);
+        plugin->setValue("Language", "JAVA");
+        mid = env->GetMethodID(cls, "getSymbolicName", "()Ljava/lang/String;");
+        jstring jid = (jstring)env->CallObjectMethod(result, mid);
+        std::string id = env->GetStringUTFChars(jid, 0);
+        plugin->setValue("Id", id);
+        mid = env->GetMethodID(cls, "getVersion", "()Lorg/osgi/framework/Version;");
+        jobject jversion_object = env->CallObjectMethod(result, mid);
+        jclass vcls = env->GetObjectClass(jversion_object);
+        mid = env->GetMethodID(vcls, "toString", "()Ljava/lang/String;");
+        jstring jversion = (jstring)env->CallObjectMethod(jversion_object, mid);
+        std::string version = env->GetStringUTFChars(jversion, 0);
+        plugin->setValue("Version", version);
+        cls = env->FindClass("org/oic/android/FelixManager");
+        mid = env->GetStaticMethodID(cls, "getValue", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
+        std::string key = "Name";
+        jstring jname = (jstring)env->CallStaticObjectMethod(cls, mid, jid, env->NewStringUTF(key.c_str()));
+        std::string name = env->GetStringUTFChars(jname, 0);
+        plugin->setValue("Name", name);
+        key = "ResourceType";
+        jstring jresourcetype = (jstring)env->CallStaticObjectMethod(cls, mid, jid, env->NewStringUTF(key.c_str()));
+        //LOGD("ResourceType:");
+        m_plugins.push_back(*plugin);
+    }
+    
+    return re_plugins;
 }
 /*
 Plugin *FelixAdapter::getPlugin(const std::string plugID)
@@ -112,17 +251,41 @@ void FelixAdapter::printPluginList(cp_plugin_info_t **plugins)
 
 int FelixAdapter::start(Plugin *const plugin, void *const arg)
 {
-    return TRUE;
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    const char *cid = plugin->getID().c_str();
+    jstring jid = env->NewStringUTF(cid);
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "start", "(Ljava/lang/String;)I");
+   
+    return (int)env->CallStaticIntMethod(cls, mid, jid);
 }
 
 int FelixAdapter::stop(Plugin *const plugin)
 {
-    return TRUE;
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    const char *cid = plugin->getID().c_str();
+    jstring jid = env->NewStringUTF(cid);
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "stop", "(Ljava/lang/String;)I");
+   
+    return (int)env->CallStaticIntMethod(cls, mid, jid);
 }
 
 bool FelixAdapter::isStarted(Plugin *plugin)
 {
-    return FALSE;
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    const char *cid = plugin->getID().c_str();
+    jstring jid = env->NewStringUTF(cid);
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "isStarted", "(Ljava/lang/String;)Z");
+   
+    return (bool)env->CallStaticBooleanMethod(cls, mid, jid);
 }
 /*
 void FelixAdapter::observePluginPath(void *str)
@@ -132,5 +295,13 @@ void FelixAdapter::observePluginPath(void *str)
 */
 const std::string FelixAdapter::getState(const std::string plugID)
 {
-    return "";
-}
\ No newline at end of file
+    JNIEnv *env;
+    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+    jstring jplugID = env->NewStringUTF(plugID.c_str());
+    jclass cls = env->FindClass("org/oic/android/FelixManager");
+    jmethodID mid = env->GetStaticMethodID(cls, "getState", "(Ljava/lang/String;)Ljava/lang/String;");
+   
+    jstring jresult = (jstring)env->CallStaticObjectMethod(cls, mid, jplugID);
+    return env->GetStringUTFChars(jresult, 0);
+}
index 7f03f7f..0fcb98c 100644 (file)
@@ -35,6 +35,7 @@
 #include <boost/thread.hpp>
 #include <boost/bind.hpp>
 #include <internal.h>
+#include <jni.h>
 
 #include "Plugin.h"
 #include "Config.h"
@@ -166,11 +167,11 @@ namespace OIC
             *
             * @return OICPluginManager pointer Address.
             */
-            static FelixAdapter *Getinstance()
+            static FelixAdapter *Getinstance(void *args=NULL)
             {
                 if (NULL == s_pinstance)
                 {
-                    s_pinstance = new FelixAdapter();
+                    s_pinstance = new FelixAdapter((JavaVM *)args);
                 }
 
                 return s_pinstance;
@@ -179,6 +180,7 @@ namespace OIC
 
 
         private:
+                       JavaVM *jvm;
             Config *config;
             typedef std::map<std::string, bool> File_list;
             std::vector<Plugin> m_plugins;
@@ -198,7 +200,7 @@ namespace OIC
             * During construction time, all plugins under the root plugin path will be loaded.
             *
             */
-            FelixAdapter();
+            FelixAdapter(JavaVM *);
 
             /**
             * Virtual destructor
index 0f4034f..551d2d8 100644 (file)
@@ -35,10 +35,10 @@ PluginManager::PluginManager()
         fprintf(stderr, "%s\n", dlerror());
         exit(EXIT_FAILURE);
     }
-    PluginManagerImpl* (*create)();
-    create = (PluginManagerImpl * (*)())dlsym(handle, "create_object");
+    PluginManagerImpl* (*create)(void*);
+    create = (PluginManagerImpl * (*)(void*))dlsym(handle, "create_object");
     destroy = (void (*)(PluginManagerImpl *))dlsym(handle, "destroy_object");
-    pluginManagerImpl = (PluginManagerImpl *)create();
+    pluginManagerImpl = (PluginManagerImpl *)create(NULL);
 }
 
 PluginManager::~PluginManager(void)
index 1f527fb..ce45e22 100644 (file)
 
 using namespace OIC;
 
-PluginManagerImpl *PluginManagerImpl::s_pinstance = nullptr;
+PluginManagerImpl *PluginManagerImpl::s_pinstance = NULL;
 
-extern "C" PluginManagerImpl *create_object()
+extern "C" PluginManagerImpl *create_object(void *args)
 {
     PluginManagerImpl *newobj;
-    newobj =  new PluginManagerImpl;
+    newobj =  new PluginManagerImpl(args);
     return newobj;
 }
 
@@ -40,10 +40,15 @@ extern "C" void destroy_object( PluginManagerImpl *object )
     delete object;
 }
 
-PluginManagerImpl::PluginManagerImpl()
+PluginManagerImpl::PluginManagerImpl(void* args)
 {
     cppm = CpluffAdapter::Getinstance();
-    javappm = FelixAdapter::Getinstance();
+    #ifdef ANDROID
+        if(args)
+            javappm = FelixAdapter::Getinstance(args);
+        else
+            javappm = NULL;
+    #endif
     refreshPluginInfo();
 }
 
@@ -56,7 +61,10 @@ int PluginManagerImpl::registerPlugin(std::string path)
 {
     int flag = 0;
     flag = cppm->registerPlugin(path);
-    flag = javappm->registerPlugin(path);
+    #ifdef ANDROID
+        if(javappm)
+            flag = javappm->registerPlugin(path);
+    #endif
     refreshPluginInfo();
     return flag;
 }
@@ -65,7 +73,12 @@ int PluginManagerImpl::registerAllPlugin(std::string path)
 {
     int flag = 0;
     flag = cppm->registerAllPlugin(path);
-    flag = javappm->registerAllPlugin(path);
+
+    #ifdef ANDROID
+        if(javappm)
+            flag = javappm->registerAllPlugin(path);
+    #endif
+
     refreshPluginInfo();
     return flag;
 }
@@ -87,10 +100,12 @@ int PluginManagerImpl::unregisterPlugin(std::string id)
             }
             else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
             {
-                if ((flag = javappm->unregisterPlugin(&m_plugins[i])))
-                {
-                    m_plugins.erase(m_plugins.begin() + i);
-                }
+                #ifdef ANDROID
+                    if ((flag = javappm->unregisterPlugin(&m_plugins[i])))
+                    {
+                        m_plugins.erase(m_plugins.begin() + i);
+                    }
+                #endif
             }
         }
     }
@@ -102,7 +117,10 @@ int PluginManagerImpl::unregisterAllPlugin()
 {
     int flag = 0;
     flag = cppm->unregisterAllPlugin();
-    flag = javappm->unregisterAllPlugin();
+    #ifdef ANDROID
+        if(javappm)
+            flag = javappm->unregisterAllPlugin();
+    #endif
     m_plugins.clear();
     return flag;
 }
@@ -124,7 +142,6 @@ int PluginManagerImpl::rescanPlugin()
     return result;
 }
 
-
 std::vector<Plugin> &PluginManagerImpl::getAllPlugins(void)
 {
     return m_plugins;
@@ -156,7 +173,7 @@ Plugin *PluginManagerImpl::getPlugin(const std::string pluginID)
         }
     }
 
-    return nullptr;
+    return NULL;
 }
 int PluginManagerImpl::startPlugins(const std::string key, const std::string value)
 {
@@ -190,14 +207,14 @@ int PluginManagerImpl::startPlugins(const std::string key, const std::string val
         }
     }
     delete(resource_plugin);
-    resource_plugin = nullptr;
+    resource_plugin = NULL;
     return flag;
 }
 
 int PluginManagerImpl::startPlugins(Plugin *const plugin)
 {
     int flag = FALSE;
-    void *arg  = nullptr;
+    void *arg  = NULL;
 
     flag = startbyPlatform(plugin, arg);
 
@@ -239,7 +256,7 @@ int PluginManagerImpl::stopPlugins(const std::string key, const std::string valu
         }
     }
     delete(resource_plugin);
-    resource_plugin = nullptr;
+    resource_plugin = NULL;
     return flag;
 }
 
@@ -266,7 +283,10 @@ int PluginManagerImpl::startbyPlatform(Plugin *const plugin, void *const arg)
             }
             else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
             {
-                flag = javappm->start(plugin, arg);
+                #ifdef ANDROID
+                    if(javappm)
+                        flag = javappm->start(plugin, arg);
+                #endif
             }
         }
     }
@@ -292,7 +312,10 @@ int PluginManagerImpl::stopbyPlatform(Plugin *const plugin)
             }
             else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
             {
-                flag = javappm->stop(plugin);
+                #ifdef ANDROID
+                    if(javappm)
+                        flag = javappm->stop(plugin);
+                #endif
             }
         }
     }
@@ -312,12 +335,15 @@ bool PluginManagerImpl::isStarted(Plugin *plugin)
         flag = TRUE;
         return flag;
     }
-
-    if (javappm->isStarted(plugin))
-    {
-        flag = TRUE;
-        return flag;
-    }
+    #ifdef ANDROID
+        if(javappm) {
+            if (javappm->isStarted(plugin))
+            {
+                flag = TRUE;
+                return flag;
+            }
+        }
+    #endif
     return flag;
 }
 
@@ -335,7 +361,10 @@ std::string PluginManagerImpl::getState(std::string plugID)
             }
             else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
             {
-                str = javappm->getState(plugID);
+                #ifdef ANDROID
+                    if(javappm)
+                        str = javappm->getState(plugID);
+                #endif
             }
         }
     }
@@ -348,13 +377,17 @@ std::vector<Plugin> PluginManagerImpl::refreshPluginInfo()
     m_plugins.clear();
     m_plugins = cppm->getAllPlugins();
 
-    std::vector<Plugin> java_plugins = javappm->getAllPlugins();
-    int size = java_plugins.size();
+    #ifdef ANDROID
+        if(javappm) {
+            std::vector<Plugin> java_plugins = javappm->getAllPlugins();
+            int size = java_plugins.size();
 
-    for (int i = 0 ; i < size ; i++)
-    {
-        m_plugins.push_back(java_plugins[i]);
-    }
+            for (int i = 0 ; i < size ; i++)
+            {
+                m_plugins.push_back(java_plugins[i]);
+            }
+        }
+    #endif
 
     return m_plugins;
-}
\ No newline at end of file
+}
index 3beb8e8..2d34ed0 100644 (file)
 
 #include "Plugin.h"
 #include "CpluffAdapter.h"
-#include "FelixAdapter.h"
+
+#ifdef ANDROID
+    #include "FelixAdapter.h"
+#endif
 
 namespace OIC
 {
@@ -40,7 +43,7 @@ namespace OIC
             * During construction time, all plugins under the root plugin path will be loaded.
             *
             */
-            PluginManagerImpl();
+            PluginManagerImpl(void* args);
 
             /**
             * Virtual destructor
@@ -174,11 +177,11 @@ namespace OIC
             */
             virtual std::vector<Plugin> &getAllPlugins(void);
 
-            static PluginManagerImpl *Getinstance()
+            static PluginManagerImpl *Getinstance(void *arg)
             {
                 if (NULL == s_pinstance)
                 {
-                    s_pinstance = new PluginManagerImpl();
+                    s_pinstance = new PluginManagerImpl(arg);
                 }
 
                 return s_pinstance;
@@ -187,7 +190,9 @@ namespace OIC
         private:
 
             CpluffAdapter *cppm;
-            FelixAdapter *javappm;
+            #ifdef ANDROID
+                FelixAdapter *javappm;
+            #endif
 
             std::vector<Plugin> m_plugins;
             static PluginManagerImpl *s_pinstance;
@@ -229,4 +234,4 @@ namespace OIC
     };
 }
 
-#endif //__PLUGINMANAGERIMPL_H__
\ No newline at end of file
+#endif //__PLUGINMANAGERIMPL_H__
index 17359ad..c25d2f2 100644 (file)
@@ -1,7 +1,7 @@
 ##
 #sample-app build script
 ##
-
+import os
 Import('env')
 
 # Add third party libraries
@@ -16,7 +16,8 @@ target_os = env.get('TARGET_OS')
 sample_env.AppendUnique(CPPPATH = [
                                '../../plugin-manager/src/',
                                '../../lib/cpluff/libcpluff/',
-                               '../../lib/rapidxml'])
+                               '../../lib/rapidxml'
+                        ])
 if target_os not in ['windows', 'winrt']:
        sample_env.AppendUnique(CXXFLAGS = ['-Wall', '-pthread'])