// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.graphview.core.property; import org.openstreetmap.josm.plugins.graphview.core.access.AccessParameters; import org.openstreetmap.josm.plugins.graphview.core.data.DataSource; /** * type of road property (as opposed to individual property values that can be identified using * a RoadPropertyType's evaluate methods). * * RoadPropertyType objects should be stateless (except for performance speedups). * * @param <V> property value type */ public interface RoadPropertyType<V> { /** * determines the property value for way-based segments. * Uses the way the segment is created from. * * @param way way that is to be evaluated; != null * @param forward chooses whether the property is evaluated * in (true) or against (false) way direction * @param accessParameters access parameters for properties that depend on vehicle/situation * @param dataSource object providing access to all data; != null * @return value of this property for the way; * null if property cannot be determined / does not apply */ <N, W, R, M> V evaluateW(W way, boolean forward, AccessParameters accessParameters, DataSource<N, W, R, M> dataSource); /** * determines the property value for node-based segments. * Uses the node the segment is created from. * * @param way node that is to be evaluated; != null * @param accessParameters access parameters for properties that depend on vehicle/situation * @param dataSource object providing access to all data; != null * @return value of this property for the way; * null if property cannot be determined / does not apply */ <N, W, R, M> V evaluateN(N node, AccessParameters accessParameters, DataSource<N, W, R, M> dataSource); /** * checks whether a segment with a given value for this property can be used by a vehicle * with a certain set of access parameters * * @param object value of this property for the segment; * MUST be of type V; != null */ boolean isUsable(Object object, AccessParameters accessParameters); }