package com.mapbox.mapboxsdk.style.functions; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.mapbox.mapboxsdk.style.functions.stops.CategoricalStops; import com.mapbox.mapboxsdk.style.functions.stops.ExponentialStops; import com.mapbox.mapboxsdk.style.functions.stops.IntervalStops; import com.mapbox.mapboxsdk.style.functions.stops.Stop; import com.mapbox.mapboxsdk.style.functions.stops.Stops; import com.mapbox.mapboxsdk.style.layers.PropertyValue; import java.util.Map; /** * Composite functions combine Camera and SourceFunctions. *

* Composite functions allow the appearance of a map feature to change with both its * properties and zoom. Each stop is an array with two elements, the first is an object * with a property input value and a zoom, and the second is a function output value. Note * that support for property functions is not yet complete. * * @param the zoom type (usually Float) * @param the input type (the feature property type) * @param the output type (the property type) * @see Function#composite */ public class CompositeFunction extends Function, O> { private final String property; private PropertyValue defaultValue; CompositeFunction(@NonNull String property, @NonNull CategoricalStops, O> stops) { this(null, property, stops); } CompositeFunction(@NonNull String property, @NonNull ExponentialStops, O> stops) { this(null, property, stops); } CompositeFunction(@NonNull String property, @NonNull IntervalStops, O> stops) { this(null, property, stops); } /** * JNI Constructor */ private CompositeFunction(@Nullable O defaultValue, @NonNull String property, @NonNull Stops, O> stops) { super(stops); this.defaultValue = new PropertyValue<>(property, defaultValue); this.property = property; } /** * Set the default value * * @param defaultValue the default value to use when no other applies * @return this (for chaining) */ public CompositeFunction withDefaultValue(PropertyValue defaultValue) { this.defaultValue = defaultValue; return this; } /** * @return the defaultValue */ @Nullable public PropertyValue getDefaultValue() { return defaultValue; } /** * INTERNAL USAGE ONLY * * @return the feature property name */ public String getProperty() { return property; } /** * {@inheritDoc} */ @Override public Map toValueObject() { Map valueObject = super.toValueObject(); valueObject.put(PROPERTY_KEY, property); if (defaultValue != null) { valueObject.put(DEFAULT_VALUE_KEY, defaultValue.value); } return valueObject; } }