summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuardiola31337 <pablo.guardiola@mapbox.com>2017-05-23 12:46:14 +0200
committerGuardiola31337 <pablo.guardiola@mapbox.com>2017-05-25 17:10:31 +0200
commit92fd70f40cb19a8bcc5cea576af7a1ff36f762a3 (patch)
treed425393cbc05b100a3656fa71628fe56511ba414
parent30cc103d98fe251b02901759c448211d8d4c42de (diff)
downloadqtlocation-mapboxgl-92fd70f40cb19a8bcc5cea576af7a1ff36f762a3.tar.gz
[WIP] wrap statement in filter and start replacing get filter nested conditional with visitor
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs4
-rw-r--r--platform/android/config.cmake2
-rw-r--r--platform/android/src/style/conversion/filter.hpp9
-rw-r--r--platform/android/src/style/filter.cpp16
-rw-r--r--platform/android/src/style/filter.hpp9
-rw-r--r--platform/android/src/style/layers/layer.cpp42
-rw-r--r--platform/android/src/style/layers/layer.hpp3
-rw-r--r--platform/android/src/style/statement.cpp15
-rw-r--r--platform/android/src/style/statement.hpp23
9 files changed, 51 insertions, 72 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs
index 6206e30be5..b20f284387 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs
@@ -9,6 +9,7 @@ package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import static com.mapbox.mapboxsdk.utils.ColorUtils.rgbaToColor;
@@ -91,8 +92,9 @@ public class <%- camelize(type) %>Layer extends Layer {
/**
* Gets the filter of the layer.
*
- * @return {@link Filter.Statement} filter layer is using
+ * @return {@link Filter.Statement} filter layer is using or null
*/
+ @Nullable
public Filter.Statement getFilter() {
return nativeGetFilter();
}
diff --git a/platform/android/config.cmake b/platform/android/config.cmake
index ef364e8226..087a5ef2f8 100644
--- a/platform/android/config.cmake
+++ b/platform/android/config.cmake
@@ -113,8 +113,6 @@ add_library(mbgl-android STATIC
platform/android/src/style/conversion/types_string_values.hpp
platform/android/src/style/filter.cpp
platform/android/src/style/filter.hpp
- platform/android/src/style/statement.cpp
- platform/android/src/style/statement.hpp
platform/android/src/map/camera_position.cpp
platform/android/src/map/camera_position.hpp
diff --git a/platform/android/src/style/conversion/filter.hpp b/platform/android/src/style/conversion/filter.hpp
index 229ddbf296..9f29a4dc08 100644
--- a/platform/android/src/style/conversion/filter.hpp
+++ b/platform/android/src/style/conversion/filter.hpp
@@ -2,7 +2,6 @@
#include "../android_conversion.hpp"
#include "../filter.hpp"
-#include "../statement.hpp"
#include "../../conversion/conversion.hpp"
#include <mbgl/style/conversion.hpp>
#include <mbgl/style/conversion/filter.hpp>
@@ -31,12 +30,10 @@ inline optional<mbgl::style::Filter> toFilter(jni::JNIEnv& env, jni::Array<jni::
}
template <>
-struct Converter<jni::Object<mbgl::android::Statement>, mbgl::style::Filter> {
- Result<jni::Object<mbgl::android::Statement>> operator()(jni::JNIEnv& env, const mbgl::style::Filter& value) const {
+struct Converter<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter> {
+ Result<jni::Object<mbgl::android::Filter::Statement>> operator()(jni::JNIEnv& env, const mbgl::style::Filter& value) const {
using namespace mbgl::android;
- auto statement = Filter::fromFilter(env, value);
-
- return statement;
+ return Filter::fromFilter(env, value);
}
};
diff --git a/platform/android/src/style/filter.cpp b/platform/android/src/style/filter.cpp
index 73c10cd775..3e5c28c08f 100644
--- a/platform/android/src/style/filter.cpp
+++ b/platform/android/src/style/filter.cpp
@@ -3,19 +3,19 @@
namespace mbgl {
namespace android {
-jni::Object<Statement> Filter::fromFilter(jni::JNIEnv& env, const mbgl::style::Filter&) {
- static auto constructor = Statement::javaClass.template GetConstructor<>(env);
-
- return Statement::javaClass.New(env, constructor);
+jni::Object<Filter::Statement> Filter::fromFilter(jni::JNIEnv& env, const mbgl::style::Filter&) {
+ static auto constructor = Filter::Statement::javaClass.template GetConstructor<>(env);
+ return Filter::Statement::javaClass.New(env, constructor);
}
+jni::Class<Filter> Filter::javaClass;
+
+jni::Class<Filter::Statement> Filter::Statement::javaClass;
+
void Filter::registerNative(jni::JNIEnv& env) {
- // Lookup the class
Filter::javaClass = *jni::Class<Filter>::Find(env).NewGlobalRef(env).release();
+ Filter::Statement::javaClass = *jni::Class<Filter::Statement>::Find(env).NewGlobalRef(env).release();
}
-jni::Class<Filter> Filter::javaClass;
-
-
} // namespace android
} // namespace mbgl \ No newline at end of file
diff --git a/platform/android/src/style/filter.hpp b/platform/android/src/style/filter.hpp
index 959ab90f1f..bfd8838f3d 100644
--- a/platform/android/src/style/filter.hpp
+++ b/platform/android/src/style/filter.hpp
@@ -4,7 +4,6 @@
#include <mbgl/util/noncopyable.hpp>
#include <jni/jni.hpp>
-#include "statement.hpp"
namespace mbgl {
namespace android {
@@ -14,12 +13,18 @@ public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/Filter"; };
- static jni::Object<Statement> fromFilter(jni::JNIEnv&, const mbgl::style::Filter&);
+ static jni::Object<Filter::Statement> fromFilter(jni::JNIEnv&, const mbgl::style::Filter&);
static jni::Class<Filter> javaClass;
static void registerNative(jni::JNIEnv&);
+ class Statement : private mbgl::util::noncopyable {
+ public:
+ static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/Filter$Statement"; };
+
+ static jni::Class<Filter::Statement> javaClass;
+ };
};
} // namespace android
diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp
index 4fa0d1a690..c01745e879 100644
--- a/platform/android/src/style/layers/layer.cpp
+++ b/platform/android/src/style/layers/layer.cpp
@@ -99,36 +99,52 @@ namespace android {
}
}
- struct SetFilterEvaluator {
- style::Filter filter;
+ struct GetFilterEvaluator {
+ std::string noop(std::string layerType) {
+ Log::Warning(mbgl::Event::JNI, "%s doesn't support filters", layerType.c_str());
+ return {};
+ }
- void operator()(style::BackgroundLayer&) { Log::Warning(mbgl::Event::JNI, "BackgroundLayer doesn't support filters"); }
- void operator()(style::CustomLayer&) { Log::Warning(mbgl::Event::JNI, "CustomLayer doesn't support filters"); }
- void operator()(style::RasterLayer&) { Log::Warning(mbgl::Event::JNI, "RasterLayer doesn't support filters"); }
+ std::string operator()(style::BackgroundLayer&) { return noop("BackgroundLayer doesn't support filters"); }
+ std::string operator()(style::CustomLayer&) { return noop("CustomLayer doesn't support filters"); }
+ std::string operator()(style::RasterLayer&) { return noop("RasterLayer doesn't support filters"); }
template <class LayerType>
- void operator()(LayerType& layer) {
- layer.setFilter(filter);
+ std::string operator()(LayerType& layer) {
+ return layer.getSourceLayer();
}
};
- jni::Object<mbgl::android::Statement> Layer::getFilter(jni::JNIEnv& env) {
+ jni::Object<mbgl::android::Filter::Statement> Layer::getFilter(jni::JNIEnv& env) {
using namespace mbgl::style;
using namespace mbgl::android::conversion;
if (layer.is<FillLayer>()) {
- return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<FillLayer>()->getFilter());
+ return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<FillLayer>()->getFilter());
} else if (layer.is<LineLayer>()) {
- return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<LineLayer>()->getFilter());
+ return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<LineLayer>()->getFilter());
} else if (layer.is<SymbolLayer>()) {
- return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<SymbolLayer>()->getFilter());
+ return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<SymbolLayer>()->getFilter());
} else if (layer.is<CircleLayer>()) {
- return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<CircleLayer>()->getFilter());
+ return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<CircleLayer>()->getFilter());
} else {
- return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, NullFilter());
+ return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, NullFilter());
}
}
+ struct SetFilterEvaluator {
+ style::Filter filter;
+
+ void operator()(style::BackgroundLayer&) { Log::Warning(mbgl::Event::JNI, "BackgroundLayer doesn't support filters"); }
+ void operator()(style::CustomLayer&) { Log::Warning(mbgl::Event::JNI, "CustomLayer doesn't support filters"); }
+ void operator()(style::RasterLayer&) { Log::Warning(mbgl::Event::JNI, "RasterLayer doesn't support filters"); }
+
+ template <class LayerType>
+ void operator()(LayerType& layer) {
+ layer.setFilter(filter);
+ }
+ };
+
void Layer::setFilter(jni::JNIEnv& env, jni::Array<jni::Object<>> jfilter) {
using namespace mbgl::style;
using namespace mbgl::style::conversion;
diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp
index aff08406dc..d72b294508 100644
--- a/platform/android/src/style/layers/layer.hpp
+++ b/platform/android/src/style/layers/layer.hpp
@@ -6,7 +6,6 @@
#include "../value.hpp"
#include "../filter.hpp"
-#include "../statement.hpp"
#include <jni/jni.hpp>
@@ -68,7 +67,7 @@ public:
/* common properties, but not shared by all */
- jni::Object<mbgl::android::Statement> getFilter(jni::JNIEnv&);
+ jni::Object<mbgl::android::Filter::Statement> getFilter(jni::JNIEnv&);
void setFilter(jni::JNIEnv&, jni::Array<jni::Object<>>);
diff --git a/platform/android/src/style/statement.cpp b/platform/android/src/style/statement.cpp
deleted file mode 100644
index f63a800297..0000000000
--- a/platform/android/src/style/statement.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "statement.hpp"
-
-namespace mbgl {
-namespace android {
-
-void Statement::registerNative(jni::JNIEnv& env) {
- // Lookup the class
- Statement::javaClass = *jni::Class<Statement>::Find(env).NewGlobalRef(env).release();
-}
-
-jni::Class<Statement> Statement::javaClass;
-
-
-} // namespace android
-} // namespace mbgl \ No newline at end of file
diff --git a/platform/android/src/style/statement.hpp b/platform/android/src/style/statement.hpp
deleted file mode 100644
index cd74ca898c..0000000000
--- a/platform/android/src/style/statement.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include <mbgl/style/filter.hpp>
-#include <mbgl/util/noncopyable.hpp>
-
-#include <jni/jni.hpp>
-
-namespace mbgl {
-namespace android {
-
-class Statement : private mbgl::util::noncopyable {
-public:
-
- static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/Filter$Statement"; };
-
- static jni::Class<Statement> javaClass;
-
- static void registerNative(jni::JNIEnv&);
-
-};
-
-} // namespace android
-} // namespace mbgl \ No newline at end of file