/// @brief
#include "FelixAdapter.h"
+#include <sstream>
using namespace OIC;
FelixAdapter *FelixAdapter::s_pinstance;
-FelixAdapter::FelixAdapter()
+FelixAdapter::FelixAdapter(JavaVM *args)
{
- config = Config::Getinstance();
+ jvm = args;
+
+ config = Config::Getinstance(args);
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;
+ if (path == "")
+ {
+ printf("FelixAdapter path == null\n");
+ return 0;
+ }
+
+ JNIEnv *env;
+ jvm->GetEnv((void **)&env, JNI_VERSION_1_6);
+
+ jstring jpath = env->NewStringUTF(path.c_str());
+ jclass cls = env->FindClass("org/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "registerPlugin", "(Ljava/lang/String;)I");
+
+ // call registerPlugin() function
+ return (int)env->CallStaticIntMethod(cls, mid, jpath);
}
int FelixAdapter::registerAllPlugin(const std::string path)
{
- return 1;
+ if (path == "")
+ {
+ printf("FelixAdapter path == null\n");
+ return 0;
+ }
+
+ JNIEnv *env;
+ jvm->GetEnv((void **)&env, JNI_VERSION_1_6);
+
+ jstring jpath = env->NewStringUTF(path.c_str());
+ jclass cls = env->FindClass("org/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "registerAllPlugin", "(Ljava/lang/String;)I");
+
+ // call registerAllPlugin() function
+ return (int)env->CallStaticIntMethod(cls, mid, jpath);
}
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/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "unregisterPlugin", "(Ljava/lang/String;)I");
+
+ // call unregisterPlugin() function
+ 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/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "unregisterAllPlugin", "()I");
+
+ // call registerAllPlugin() function
+ 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/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "getAllPlugins", "()[Lorg/osgi/framework/Bundle;");
+
+ // call getAllPlugins() function
+ 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);
+ // set Language value
+ plugin->setValue("Language", "JAVA");
+ // set Id value
+ 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);
+ // set Version value
+ 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);
+ // set Name value
+ cls = env->FindClass("org/iotivity/service/ppm/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);
+ // set ResourceType value
+ key = "ResourceType";
+ jstring jresourcetype = (jstring)env->CallStaticObjectMethod(cls, mid, jid,
+ env->NewStringUTF(key.c_str()));
+ std::string resourcetype = env->GetStringUTFChars(jresourcetype, 0);
+ plugin->setValue("ResourceType", resourcetype);
+ // push the plugin into the vector
+ 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/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "findPlugins",
+ "(Ljava/lang/String;Ljava/lang/String;)[Lorg/osgi/framework/Bundle;");
+
+ // call findPlugins() function
+ 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);
+ // set Language value
+ plugin->setValue("Language", "JAVA");
+ // set Id value
+ 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);
+ // set Version value
+ 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);
+ // set Name value
+ cls = env->FindClass("org/iotivity/service/ppm/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);
+ // set ResourceType value
+ key = "ResourceType";
+ jstring jresourcetype = (jstring)env->CallStaticObjectMethod(cls, mid, jid,
+ env->NewStringUTF(key.c_str()));
+ std::string resourcetype = env->GetStringUTFChars(jresourcetype, 0);
+ plugin->setValue("ResourceType", resourcetype);
+ // push the plugin into the vector
+ 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/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "start", "(Ljava/lang/String;)I");
+
+ // call start() function
+ 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/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "stop", "(Ljava/lang/String;)I");
+
+ // call stop() function
+ 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/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "isStarted", "(Ljava/lang/String;)Z");
+
+ // call isStarted() function
+ return (bool)env->CallStaticBooleanMethod(cls, mid, jid);
}
+
/*
void FelixAdapter::observePluginPath(void *str)
{
}
*/
+
const std::string FelixAdapter::getState(const std::string plugID)
{
- return "";
+ JNIEnv *env;
+ jvm->GetEnv((void **)&env, JNI_VERSION_1_6);
+
+ jstring jplugID = env->NewStringUTF(plugID.c_str());
+ jclass cls = env->FindClass("org/iotivity/service/ppm/FelixManager");
+ jmethodID mid = env->GetStaticMethodID(cls, "getState",
+ "(Ljava/lang/String;)Ljava/lang/String;");
+
+ // call getState() function
+ jstring jresult = (jstring)env->CallStaticObjectMethod(cls, mid, jplugID);
+ return env->GetStringUTFChars(jresult, 0);
}
\ No newline at end of file