// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.mappaint.mapcss; import org.openstreetmap.josm.gui.mappaint.Cascade; import org.openstreetmap.josm.gui.mappaint.Environment; /** * A subpart identifies different rendering layers (<code>::subpart</code> syntax). * @since 8086 (creation) * @since 10600 (functional interface) */ @FunctionalInterface public interface Subpart { String getId(Environment env); Subpart DEFAULT_SUBPART = new StringSubpart("default"); /** * Simple static subpart identifier. * * E.g. ::layer_1 */ class StringSubpart implements Subpart { private final String id; public StringSubpart(String id) { this.id = id; } @Override public String getId(Environment env) { return id; } @Override public String toString() { return id; } } /** * Subpart identifier given by an expression. * * E.g. ::(concat("layer_", prop("i", "default"))) */ class ExpressionSubpart implements Subpart { private final Expression id; public ExpressionSubpart(Expression id) { this.id = id; } @Override public String getId(Environment env) { return Cascade.convertTo(id.evaluate(env), String.class); } @Override public String toString() { return String.valueOf(id); } } }