60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#include "event.h"
|
|
#include "libplugin.h"
|
|
|
|
#include <iostream>
|
|
|
|
jobject Event::getMap(JNIEnv* env) {
|
|
return env->GetObjectField(input, EVENTDATAF);
|
|
}
|
|
|
|
const std::string& Event::getName() const {
|
|
return name;
|
|
}
|
|
|
|
void* Event::getData(JNIEnv* env, const std::string& name) {
|
|
std::cout << "Try to access " << name << std::endl;
|
|
//search in map
|
|
auto it = data.find(name);
|
|
if(it == data.end()) {
|
|
//search in original object
|
|
//construct string
|
|
jstring term = env->NewStringUTF(name.c_str());
|
|
|
|
//call data.get()
|
|
jobject map = getMap(env);
|
|
jobject content = env->CallObjectMethod(map, MAPGET, term);
|
|
|
|
//data.insert for next time
|
|
data.insert({name, content});
|
|
|
|
//delete string
|
|
env->DeleteLocalRef(term);
|
|
} else {
|
|
return it->second;
|
|
}
|
|
|
|
return nullptr;
|
|
}
|
|
|
|
void Event::setData(const std::string& name, void* d) {
|
|
//just put it in the map
|
|
data.insert({name, d});
|
|
}
|
|
|
|
void Event::reapply(JNIEnv* env, jobject jevent) {
|
|
jobject map = getMap(env);
|
|
for(auto it : data) {
|
|
std::cout << "write back to java: " << it.first << std::endl;
|
|
jstring key = env->NewStringUTF(it.first.c_str());
|
|
|
|
env->CallObjectMethod(map, MAPPUT, key, it.second);
|
|
env->DeleteLocalRef(key);
|
|
}
|
|
}
|
|
|
|
Event::Event(JNIEnv* env, jobject jevent) {
|
|
//get name
|
|
jstring name = (jstring) env->GetObjectField(jevent, EVENTNAMEF);
|
|
this->name = std::string(env->GetStringUTFChars(name, 0));
|
|
input = jevent;
|
|
} |