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

79 lines
1.6 KiB
C++

#include "event.h"
#include "libplugin.h"
#include <iostream>
namespace Plugin {
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) {
DEB("Try to access " << name);
load(env, JNI_MAP);
//search in map
auto it = data.find(name);
if(it == data.end()) {
DEB("Not in map");
//search in original object
//construct string
jstring term = env->NewStringUTF(name.c_str());
//call data.get()
DEB("Access Java-Map");
jobject map = getMap(env);
jobject content = env->CallObjectMethod(map, MAPGET, term);
DEB("Got " << content);
//data.insert for next time
data.insert({name, content});
//delete string
DEB("Delete REF");
env->DeleteLocalRef(term);
return content;
} else {
return it->second;
}
return nullptr;
}
void Event::setData(const std::string& name, void* d) {
//just put it in the map
data.erase(name); //delete old
data.insert({name, d});//insert new
}
void Event::reapply(JNIEnv* env, jobject jevent) {
jobject map = getMap(env);
//clear old map
env->CallObjectMethod(map, MAPCLEAR);
for(auto it : data) {
std::cout << "write back to java: " << it.first << " Value: " << it.second << 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;
}
}