package com.mapbox.mapboxsdk.style.functions; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.mapbox.mapboxsdk.style.functions.stops.Stops; import com.mapbox.mapboxsdk.style.layers.PropertyValue; import java.util.Map; /** * Source functions take Feature property names as input. *

* Source functions allow the appearance of a map feature to change with * its properties. Source functions can be used to visually differentiate * types of features within the same layer or create data visualizations. * Each stop is an array with two elements, the first is a property input * value and the second is a function output value. Note that support for * property functions is not available across all properties and platforms * at this time. * * @param the input type * @param the output type * @see Function#property */ public class SourceFunction extends Function { private final String property; private PropertyValue defaultValue; SourceFunction(@NonNull String property, @NonNull Stops stops) { this(null, property, stops); } /** * JNI Constructor */ private SourceFunction(@Nullable O defaultValue, @NonNull String property, @NonNull Stops stops) { super(stops); this.property = property; this.defaultValue = defaultValue != null ? new PropertyValue<>(property, defaultValue) : null; } /** * INTERNAL USAGE ONLY * * @return The feature property name */ public String getProperty() { return property; } /** * Set the default value * * @param defaultValue the default value to use when no other applies * @return this (for chaining) */ public SourceFunction withDefaultValue(PropertyValue defaultValue) { this.defaultValue = defaultValue; return this; } /** * @return the defaultValue */ @Nullable public PropertyValue getDefaultValue() { return defaultValue; } /** * {@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; } }