/// @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 != "")
}
else
{
- fprintf(stderr, "Pluing path is not exist\n");
+ fprintf(stderr, "Pluin path does not exist\n");
pluginpath = "";
}
registerAllPlugin(pluginpath);
FelixAdapter::~FelixAdapter(void)
{
+
s_pinstance->deleteinstance();
+ s_pinstance = NULL;
}
int FelixAdapter::installPlugin(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)
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)
*/
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);
+}
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;
}
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();
}
{
int flag = 0;
flag = cppm->registerPlugin(path);
- flag = javappm->registerPlugin(path);
+ #ifdef ANDROID
+ if(javappm)
+ flag = javappm->registerPlugin(path);
+ #endif
refreshPluginInfo();
return flag;
}
{
int flag = 0;
flag = cppm->registerAllPlugin(path);
- flag = javappm->registerAllPlugin(path);
+
+ #ifdef ANDROID
+ if(javappm)
+ flag = javappm->registerAllPlugin(path);
+ #endif
+
refreshPluginInfo();
return flag;
}
}
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
}
}
}
{
int flag = 0;
flag = cppm->unregisterAllPlugin();
- flag = javappm->unregisterAllPlugin();
+ #ifdef ANDROID
+ if(javappm)
+ flag = javappm->unregisterAllPlugin();
+ #endif
m_plugins.clear();
return flag;
}
return result;
}
-
std::vector<Plugin> &PluginManagerImpl::getAllPlugins(void)
{
return m_plugins;
}
}
- return nullptr;
+ return NULL;
}
int PluginManagerImpl::startPlugins(const std::string key, const std::string value)
{
}
}
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);
}
}
delete(resource_plugin);
- resource_plugin = nullptr;
+ resource_plugin = NULL;
return flag;
}
}
else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
{
- flag = javappm->start(plugin, arg);
+ #ifdef ANDROID
+ if(javappm)
+ flag = javappm->start(plugin, arg);
+ #endif
}
}
}
}
else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
{
- flag = javappm->stop(plugin);
+ #ifdef ANDROID
+ if(javappm)
+ flag = javappm->stop(plugin);
+ #endif
}
}
}
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;
}
}
else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
{
- str = javappm->getState(plugID);
+ #ifdef ANDROID
+ if(javappm)
+ str = javappm->getState(plugID);
+ #endif
}
}
}
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
+}