#include "feature.hpp" #include "geometry.hpp" namespace mbgl { namespace android { namespace geojson { mbgl::Feature Feature::convert(jni::JNIEnv& env, jni::Object jFeature) { // Convert auto jGeometry = geometry(env, jFeature); auto jProperties = Feature::properties(env, jFeature); std::experimental::optional id; auto jId = Feature::id(env, jFeature); if (jId) { id = { jni::Make(env, jId) }; } auto feature = mbgl::Feature { Geometry::convert(env, jGeometry), gson::JsonObject::convert(env, jProperties), id }; // Cleanup jni::DeleteLocalRef(env, jGeometry); jni::DeleteLocalRef(env, jProperties); jni::DeleteLocalRef(env, jId); return feature; } jni::Object Feature::geometry(jni::JNIEnv& env, jni::Object jFeature) { static auto method = Feature::javaClass.GetMethod ()>(env, "geometry"); return jFeature.Call(env, method); } jni::Object Feature::properties(jni::JNIEnv& env, jni::Object jFeature) { static auto method = Feature::javaClass.GetMethod ()>(env, "properties"); return jFeature.Call(env, method); } jni::String Feature::id(jni::JNIEnv& env, jni::Object jFeature) { static auto method = Feature::javaClass.GetMethod(env, "id"); return jFeature.Call(env, method); } jni::Object Feature::fromGeometry(jni::JNIEnv& env, jni::Object geometry, jni::Object properties, jni::String id) { static auto method = Feature::javaClass.GetStaticMethod (jni::Object, jni::Object, jni::String)>(env, "fromGeometry"); return Feature::javaClass.Call(env, method, geometry, properties, id); } void Feature::registerNative(jni::JNIEnv& env) { // Lookup the class Feature::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); } jni::Class Feature::javaClass; } // namespace geojson } // namespace android } // namespace mbgl