// 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; import org.openstreetmap.josm.plugins.graphview.core.data.TagGroup; import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser; public class RoadIncline implements RoadPropertyType<Float> { @Override public <N, W, R, M> Float evaluateN(N node, AccessParameters accessParameters, DataSource<N, W, R, M> dataSource) { return null; } @Override public <N, W, R, M> Float evaluateW(W way, boolean forward, AccessParameters accessParameters, DataSource<N, W, R, M> dataSource) { assert way != null && accessParameters != null && dataSource != null; TagGroup tags = dataSource.getTagsW(way); String inclineString = tags.getValue("incline"); if (inclineString != null) { Float incline = ValueStringParser.parseIncline(inclineString); if (incline != null) { if (!forward) { incline = -incline; } return incline; } } return null; } @Override public boolean isUsable(Object propertyValue, AccessParameters accessParameters) { assert propertyValue instanceof Float; float incline = (Float) propertyValue; Float maxInclineUp = accessParameters.getVehiclePropertyValue(VehiclePropertyTypes.MAX_INCLINE_UP); Float maxInclineDown = accessParameters.getVehiclePropertyValue(VehiclePropertyTypes.MAX_INCLINE_DOWN); if (maxInclineUp != null && incline > maxInclineUp) { return false; } else if (maxInclineDown != null && -incline > maxInclineDown) { return false; } else { return true; } } }