From f0110350176e48e4ee2bac7a923287444f85dbea Mon Sep 17 00:00:00 2001 From: Tobrun Date: Mon, 19 Mar 2018 15:11:17 +0100 Subject: Expression filters (#11429) * [android] - add expression filter integration --- .../java/com/mapbox/mapboxsdk/maps/MapboxMap.java | 10 +- .../com/mapbox/mapboxsdk/maps/NativeMapView.java | 6 +- .../mapboxsdk/style/layers/BackgroundLayer.java | 3 + .../mapbox/mapboxsdk/style/layers/CircleLayer.java | 30 ++- .../mapboxsdk/style/layers/FillExtrusionLayer.java | 30 ++- .../mapbox/mapboxsdk/style/layers/FillLayer.java | 30 ++- .../com/mapbox/mapboxsdk/style/layers/Filter.java | 230 --------------------- .../mapboxsdk/style/layers/HeatmapLayer.java | 30 ++- .../mapboxsdk/style/layers/HillshadeLayer.java | 3 + .../com/mapbox/mapboxsdk/style/layers/Layer.java | 3 + .../mapbox/mapboxsdk/style/layers/LineLayer.java | 30 ++- .../mapbox/mapboxsdk/style/layers/RasterLayer.java | 3 + .../mapbox/mapboxsdk/style/layers/SymbolLayer.java | 30 ++- .../mapbox/mapboxsdk/style/layers/layer.java.ejs | 30 ++- .../style/sources/CustomGeometrySource.java | 6 +- .../mapboxsdk/style/sources/GeoJsonSource.java | 6 +- .../mapboxsdk/style/sources/VectorSource.java | 6 +- 17 files changed, 197 insertions(+), 289 deletions(-) delete mode 100644 platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Filter.java (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index 45cb75b2da..6542b15841 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -40,7 +40,7 @@ import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.constants.Style; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.geometry.LatLngBounds; -import com.mapbox.mapboxsdk.style.layers.Filter; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.Layer; import com.mapbox.mapboxsdk.style.light.Light; import com.mapbox.mapboxsdk.style.sources.Source; @@ -2079,13 +2079,13 @@ public final class MapboxMap { * Queries the map for rendered features * * @param coordinates the point to query - * @param filter filters the returned features + * @param filter filters the returned features with an expression * @param layerIds optionally - only query these layers * @return the list of feature */ @NonNull public List queryRenderedFeatures(@NonNull PointF coordinates, - @Nullable Filter.Statement filter, + @Nullable Expression filter, @Nullable String... layerIds) { return nativeMapView.queryRenderedFeatures(coordinates, layerIds, filter); } @@ -2107,13 +2107,13 @@ public final class MapboxMap { * Queries the map for rendered features * * @param coordinates the box to query - * @param filter filters the returned features + * @param filter filters the returned features with an expression * @param layerIds optionally - only query these layers * @return the list of feature */ @NonNull public List queryRenderedFeatures(@NonNull RectF coordinates, - @Nullable Filter.Statement filter, + @Nullable Expression filter, @Nullable String... layerIds) { return nativeMapView.queryRenderedFeatures(coordinates, layerIds, filter); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java index 1b6522d348..976277dcac 100755 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java @@ -24,8 +24,8 @@ import com.mapbox.mapboxsdk.geometry.LatLngBounds; import com.mapbox.mapboxsdk.geometry.ProjectedMeters; import com.mapbox.mapboxsdk.maps.renderer.MapRenderer; import com.mapbox.mapboxsdk.storage.FileSource; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.CannotAddLayerException; -import com.mapbox.mapboxsdk.style.layers.Filter; import com.mapbox.mapboxsdk.style.layers.Layer; import com.mapbox.mapboxsdk.style.light.Light; import com.mapbox.mapboxsdk.style.sources.CannotAddSourceException; @@ -799,7 +799,7 @@ final class NativeMapView { @NonNull public List queryRenderedFeatures(@NonNull PointF coordinates, @Nullable String[] layerIds, - @Nullable Filter.Statement filter) { + @Nullable Expression filter) { if (isDestroyedOn("queryRenderedFeatures")) { return new ArrayList<>(); } @@ -811,7 +811,7 @@ final class NativeMapView { @NonNull public List queryRenderedFeatures(@NonNull RectF coordinates, @Nullable String[] layerIds, - @Nullable Filter.Statement filter) { + @Nullable Expression filter) { if (isDestroyedOn("queryRenderedFeatures")) { return new ArrayList<>(); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java index 978fa29ef8..60c2aa907b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/BackgroundLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java index 10663142b5..8f1c00f1b5 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/CircleLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** @@ -69,25 +72,40 @@ public class CircleLayer extends Layer { } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set */ - public void setFilter(Filter.Statement filter) { + public void setFilter(Expression filter) { nativeSetFilter(filter.toArray()); } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set * @return This */ - public CircleLayer withFilter(Filter.Statement filter) { + public CircleLayer withFilter(Expression filter) { setFilter(filter); return this; } + /** + * Get a single expression filter. + * + * @return the expression filter to get + */ + @Nullable + public Expression getFilter() { + Expression expression = null; + JsonArray array = nativeGetFilter(); + if (array != null) { + expression = Expression.Converter.convert(array); + } + return expression; + } + /** * Set a property or properties. * diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java index 6772da73b1..34f062b4d6 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** @@ -69,25 +72,40 @@ public class FillExtrusionLayer extends Layer { } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set */ - public void setFilter(Filter.Statement filter) { + public void setFilter(Expression filter) { nativeSetFilter(filter.toArray()); } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set * @return This */ - public FillExtrusionLayer withFilter(Filter.Statement filter) { + public FillExtrusionLayer withFilter(Expression filter) { setFilter(filter); return this; } + /** + * Get a single expression filter. + * + * @return the expression filter to get + */ + @Nullable + public Expression getFilter() { + Expression expression = null; + JsonArray array = nativeGetFilter(); + if (array != null) { + expression = Expression.Converter.convert(array); + } + return expression; + } + /** * Set a property or properties. * diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java index 3719ae9e1b..1865349c42 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** @@ -69,25 +72,40 @@ public class FillLayer extends Layer { } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set */ - public void setFilter(Filter.Statement filter) { + public void setFilter(Expression filter) { nativeSetFilter(filter.toArray()); } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set * @return This */ - public FillLayer withFilter(Filter.Statement filter) { + public FillLayer withFilter(Expression filter) { setFilter(filter); return this; } + /** + * Get a single expression filter. + * + * @return the expression filter to get + */ + @Nullable + public Expression getFilter() { + Expression expression = null; + JsonArray array = nativeGetFilter(); + if (array != null) { + expression = Expression.Converter.convert(array); + } + return expression; + } + /** * Set a property or properties. * diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Filter.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Filter.java deleted file mode 100644 index 4dbb461e4c..0000000000 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Filter.java +++ /dev/null @@ -1,230 +0,0 @@ -package com.mapbox.mapboxsdk.style.layers; - -import java.util.ArrayList; -import java.util.Collections; - -/** - * Utility to build filter expressions more easily. - * - * @see The online documentation - */ -public class Filter { - - /** - * Base Filter statement. Subclassed to provide concrete statements. - */ - public abstract static class Statement { - protected final String operator; - - public Statement(String operator) { - this.operator = operator; - } - - /** - * Generate a raw array representation of the filter - * - * @return the filter represented as an array - */ - public abstract Object[] toArray(); - } - - /** - * Represents a {@link Filter} statement. Can be unary (eg `has()`, etc) or take any number of values. - */ - private static class SimpleStatement extends Statement { - private final String key; - private final Object[] values; - - /** - * @param operator the operator (eg `=`, etc) - * @param key the property key - * @param values the values to operate on, if any - */ - SimpleStatement(String operator, String key, Object... values) { - super(operator); - this.key = key; - this.values = values; - } - - - /** - * {@inheritDoc} - */ - @Override - public Object[] toArray() { - ArrayList array = new ArrayList<>(2 + values.length); - array.add(operator); - array.add(key); - Collections.addAll(array, values); - return array.toArray(); - } - } - - /** - * Represents a collection of {@link Statement}s with an operator that describes their relationship - */ - private static class CompoundStatement extends Statement { - private final Statement[] statements; - - /** - * @param operator the relationship operator - * @param statements the statements to compound - */ - CompoundStatement(String operator, Statement... statements) { - super(operator); - this.statements = statements; - } - - /** - * {@inheritDoc} - */ - @Override - public Object[] toArray() { - ArrayList array = new ArrayList<>(1 + statements.length); - array.add(operator); - for (Statement statement : statements) { - array.add(statement.toArray()); - } - return array.toArray(); - } - } - - /** - * Groups a collection of statements in an 'all' relationship - * - * @param statements the collection of statements - * @return the statements compounded - */ - public static Statement all(Statement... statements) { - return new CompoundStatement("all", statements); - } - - /** - * Groups a collection of statements in an 'any' relationship - * - * @param statements the collection of statements - * @return the statements compounded - */ - public static Statement any(Statement... statements) { - return new CompoundStatement("any", statements); - } - - /** - * Groups a collection of statements in an 'none' relationship - * - * @param statements the collection of statements - * @return the statements compounded - */ - public static Statement none(Statement... statements) { - return new CompoundStatement("none", statements); - } - - /** - * Check the property's existence - * - * @param key the property key - * @return the statement - */ - public static Statement has(String key) { - return new SimpleStatement("has", key); - } - - /** - * Check the property's existence, negated - * - * @param key the property key - * @return the statement - */ - public static Statement notHas(String key) { - return new SimpleStatement("!has", key); - } - - /** - * Check the property equals the given value - * - * @param key the property key - * @param value the value to check against - * @return the statement - */ - public static Statement eq(String key, Object value) { - return new SimpleStatement("==", key, value); - } - - /** - * Check the property does not equals the given value - * - * @param key the property key - * @param value the value to check against - * @return the statement - */ - public static Statement neq(String key, Object value) { - return new SimpleStatement("!=", key, value); - } - - /** - * Check the property exceeds the given value - * - * @param key the property key - * @param value the value to check against - * @return the statement - */ - public static Statement gt(String key, Object value) { - return new SimpleStatement(">", key, value); - } - - /** - * Check the property exceeds or equals the given value - * - * @param key the property key - * @param value the value to check against - * @return the statement - */ - public static Statement gte(String key, Object value) { - return new SimpleStatement(">=", key, value); - } - - /** - * Check the property does not exceeds the given value - * - * @param key the property key - * @param value the value to check against - * @return the statement - */ - public static Statement lt(String key, Object value) { - return new SimpleStatement("<", key, value); - } - - /** - * Check the property equals or does not exceeds the given value - * - * @param key the property key - * @param value the value to check against - * @return the statement - */ - public static Statement lte(String key, Object value) { - return new SimpleStatement("<=", key, value); - } - - /** - * Check the property is within the given set - * - * @param key the property key - * @param values the set of values to check against - * @return the statement - */ - public static Statement in(String key, Object... values) { - return new SimpleStatement("in", key, values); - } - - /** - * Check the property is not within the given set - * - * @param key the property key - * @param values the set of values to check against - * @return the statement - */ - public static Statement notIn(String key, Object... values) { - return new SimpleStatement("!in", key, values); - } - -} diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HeatmapLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HeatmapLayer.java index bfc663449f..a8d07bdbb4 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HeatmapLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HeatmapLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** @@ -69,25 +72,40 @@ public class HeatmapLayer extends Layer { } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set */ - public void setFilter(Filter.Statement filter) { + public void setFilter(Expression filter) { nativeSetFilter(filter.toArray()); } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set * @return This */ - public HeatmapLayer withFilter(Filter.Statement filter) { + public HeatmapLayer withFilter(Expression filter) { setFilter(filter); return this; } + /** + * Get a single expression filter. + * + * @return the expression filter to get + */ + @Nullable + public Expression getFilter() { + Expression expression = null; + JsonArray array = nativeGetFilter(); + if (array != null) { + expression = Expression.Converter.convert(array); + } + return expression; + } + /** * Set a property or properties. * diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HillshadeLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HillshadeLayer.java index 7e3d3a7779..fb086f424b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HillshadeLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/HillshadeLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java index 66db88bafb..26fc9d32e1 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Layer.java @@ -2,6 +2,7 @@ package com.mapbox.mapboxsdk.style.layers; import android.support.annotation.NonNull; +import com.google.gson.JsonArray; import com.mapbox.mapboxsdk.style.expressions.Expression; /** @@ -71,6 +72,8 @@ public abstract class Layer { protected native void nativeSetFilter(Object[] filter); + protected native JsonArray nativeGetFilter(); + protected native void nativeSetSourceLayer(String sourceLayer); protected native String nativeGetSourceLayer(); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java index ca106cc106..9dbd3aeb19 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/LineLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** @@ -69,25 +72,40 @@ public class LineLayer extends Layer { } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set */ - public void setFilter(Filter.Statement filter) { + public void setFilter(Expression filter) { nativeSetFilter(filter.toArray()); } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set * @return This */ - public LineLayer withFilter(Filter.Statement filter) { + public LineLayer withFilter(Expression filter) { setFilter(filter); return this; } + /** + * Get a single expression filter. + * + * @return the expression filter to get + */ + @Nullable + public Expression getFilter() { + Expression expression = null; + JsonArray array = nativeGetFilter(); + if (array != null) { + expression = Expression.Converter.convert(array); + } + return expression; + } + /** * Set a property or properties. * diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java index a0f45535f6..0c7948f62a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/RasterLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java index d0fb82dce5..bc1e02a89f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java @@ -4,10 +4,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** @@ -69,25 +72,40 @@ public class SymbolLayer extends Layer { } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set */ - public void setFilter(Filter.Statement filter) { + public void setFilter(Expression filter) { nativeSetFilter(filter.toArray()); } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set * @return This */ - public SymbolLayer withFilter(Filter.Statement filter) { + public SymbolLayer withFilter(Expression filter) { setFilter(filter); return this; } + /** + * Get a single expression filter. + * + * @return the expression filter to get + */ + @Nullable + public Expression getFilter() { + Expression expression = null; + JsonArray array = nativeGetFilter(); + if (array != null) { + expression = Expression.Converter.convert(array); + } + return expression; + } + /** * Set a property or properties. * 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 77fa11808e..f3941aacf6 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,10 +9,13 @@ 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; +import com.google.gson.JsonArray; +import com.mapbox.mapboxsdk.style.expressions.Expression; import com.mapbox.mapboxsdk.style.layers.TransitionOptions; /** @@ -89,25 +92,40 @@ public class <%- camelize(type) %>Layer extends Layer { } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set */ - public void setFilter(Filter.Statement filter) { + public void setFilter(Expression filter) { nativeSetFilter(filter.toArray()); } /** - * Set a single filter. + * Set a single expression filter. * - * @param filter the filter to set + * @param filter the expression filter to set * @return This */ - public <%- camelize(type) %>Layer withFilter(Filter.Statement filter) { + public <%- camelize(type) %>Layer withFilter(Expression filter) { setFilter(filter); return this; } + /** + * Get a single expression filter. + * + * @return the expression filter to get + */ + @Nullable + public Expression getFilter() { + Expression expression = null; + JsonArray array = nativeGetFilter(); + if (array != null) { + expression = Expression.Converter.convert(array); + } + return expression; + } + <% } -%> /** * Set a property or properties. diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/CustomGeometrySource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/CustomGeometrySource.java index 1b0999ae2e..21a34f6064 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/CustomGeometrySource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/CustomGeometrySource.java @@ -8,7 +8,7 @@ import android.support.annotation.WorkerThread; import com.mapbox.geojson.Feature; import com.mapbox.geojson.FeatureCollection; import com.mapbox.mapboxsdk.geometry.LatLngBounds; -import com.mapbox.mapboxsdk.style.layers.Filter; +import com.mapbox.mapboxsdk.style.expressions.Expression; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -94,11 +94,11 @@ public class CustomGeometrySource extends Source { /** * Queries the source for features. * - * @param filter an optional filter statement to filter the returned Features + * @param filter an optional filter expression to filter the returned Features * @return the features */ @NonNull - public List querySourceFeatures(@Nullable Filter.Statement filter) { + public List querySourceFeatures(@Nullable Expression filter) { Feature[] features = querySourceFeatures(filter != null ? filter.toArray() : null); return features != null ? Arrays.asList(features) : new ArrayList(); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java index 4a2f29b503..efacc18741 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java @@ -7,7 +7,7 @@ import android.support.annotation.UiThread; import com.mapbox.geojson.Feature; import com.mapbox.geojson.FeatureCollection; import com.mapbox.geojson.Geometry; -import com.mapbox.mapboxsdk.style.layers.Filter; +import com.mapbox.mapboxsdk.style.expressions.Expression; import java.net.URL; import java.util.ArrayList; @@ -238,11 +238,11 @@ public class GeoJsonSource extends Source { /** * Queries the source for features. * - * @param filter an optional filter statement to filter the returned Features + * @param filter an optional filter expression to filter the returned Features * @return the features */ @NonNull - public List querySourceFeatures(@Nullable Filter.Statement filter) { + public List querySourceFeatures(@Nullable Expression filter) { Feature[] features = querySourceFeatures(filter != null ? filter.toArray() : null); return features != null ? Arrays.asList(features) : new ArrayList(); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/VectorSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/VectorSource.java index 62b08a90ed..d82eaaa1c7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/VectorSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/VectorSource.java @@ -6,7 +6,7 @@ import android.support.annotation.Size; import android.support.annotation.UiThread; import com.mapbox.geojson.Feature; -import com.mapbox.mapboxsdk.style.layers.Filter; +import com.mapbox.mapboxsdk.style.expressions.Expression; import java.net.URL; import java.util.ArrayList; @@ -64,12 +64,12 @@ public class VectorSource extends Source { * Queries the source for features. * * @param sourceLayerIds the source layer identifiers. At least one must be specified. - * @param filter an optional filter statement to filter the returned Features + * @param filter an optional filter expression to filter the returned Features * @return the features */ @NonNull public List querySourceFeatures(@Size(min = 1) String[] sourceLayerIds, - @Nullable Filter.Statement filter) { + @Nullable Expression filter) { Feature[] features = querySourceFeatures( sourceLayerIds, filter != null ? filter.toArray() : null); -- cgit v1.2.1