CppPlugins/src/main/cpp/src/event.cpp

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;
}