package org.geotools.styling.builder; import java.awt.Color; import org.geotools.styling.Stroke; import org.geotools.util.Converters; import org.opengis.filter.expression.Expression; /** * * * @source $URL$ */ public class StrokeBuilder extends AbstractStyleBuilder<Stroke> { Expression color; Expression width; Expression opacity; Expression lineCap; Expression lineJoin; float[] dashArray = null; Expression dashOffset; GraphicBuilder graphicFill = new GraphicBuilder(this).unset(); GraphicBuilder graphicStroke = new GraphicBuilder(this).unset(); public StrokeBuilder() { this(null); } public StrokeBuilder(AbstractStyleBuilder<?> parent) { super(parent); reset(); } public StrokeBuilder unset() { return (StrokeBuilder) super.unset(); } /** * Reset stroke to default values. */ public StrokeBuilder reset() { color = Stroke.DEFAULT.getColor(); width = Stroke.DEFAULT.getWidth(); opacity = Stroke.DEFAULT.getOpacity(); lineCap = Stroke.DEFAULT.getLineCap(); lineJoin = Stroke.DEFAULT.getLineJoin(); dashArray = Stroke.DEFAULT.getDashArray(); dashOffset = Stroke.DEFAULT.getDashOffset(); graphicFill.unset(); graphicStroke.unset(); unset = false; return this; } @Override public StrokeBuilder reset(Stroke original) { return reset((org.opengis.style.Stroke) original); } /** * Reset builder to provided original stroke. * * @param stroke */ public StrokeBuilder reset(org.opengis.style.Stroke stroke) { if (stroke == null) { return unset(); } color = stroke.getColor(); width = stroke.getWidth(); opacity = stroke.getOpacity(); lineCap = stroke.getLineCap(); lineJoin = stroke.getLineJoin(); dashArray = stroke.getDashArray(); dashOffset = stroke.getDashOffset(); graphicFill.reset(stroke.getGraphicFill()); graphicStroke.reset(stroke.getGraphicStroke()); unset = false; return this; } public StrokeBuilder color(Expression color) { unset = false; this.color = color; return this; } public StrokeBuilder color(Color color) { return color(literal(color)); } public StrokeBuilder color(String cqlExpression) { return color(cqlExpression(cqlExpression)); } public StrokeBuilder colorHex(String hex) { Color color = Converters.convert(hex, Color.class); if (color == null) { throw new IllegalArgumentException( "The provided expression could not be turned into a color: " + hex); } return color(color); } public StrokeBuilder width(Expression width) { unset = false; this.width = width; return this; } public StrokeBuilder width(double width) { return width(literal(width)); } public StrokeBuilder width(String cqlExpression) { return width(cqlExpression(cqlExpression)); } public StrokeBuilder opacity(Expression opacity) { unset = false; this.opacity = opacity; return this; } public StrokeBuilder opacity(double opacity) { return opacity(literal(opacity)); } public StrokeBuilder opacity(String cqlExpression) { return opacity(cqlExpression(cqlExpression)); } public StrokeBuilder lineCap(Expression lineCap) { unset = false; this.lineCap = lineCap; return this; } public StrokeBuilder lineCap(String cqlExpression) { return lineCap(cqlExpression(cqlExpression)); } public StrokeBuilder lineCapName(String cap) { return lineCap(literal(cap)); } public StrokeBuilder lineJoin(Expression lineJoin) { unset = false; this.lineJoin = lineJoin; return this; } public StrokeBuilder lineJoin(String cqlExpression) { return lineJoin(cqlExpression(cqlExpression)); } public StrokeBuilder lineJoinName(String join) { return lineJoin(literal(join)); } public StrokeBuilder dashArray(float... dashArray) { this.dashArray = dashArray; unset = false; return this; } public StrokeBuilder dashOffset(Expression dashOffset) { this.dashOffset = dashOffset; return this; } public StrokeBuilder dashOffset(double dashOffset) { return dashOffset(literal(dashOffset)); } public StrokeBuilder dashOffset(String cqlExpression) { return dashOffset(cqlExpression(cqlExpression)); } public GraphicBuilder graphicStroke() { unset = false; return graphicStroke; } public GraphicBuilder fillBuilder() { unset = false; return graphicFill; } public Stroke build() { if (unset) { return null; } Stroke stroke = sf.createStroke(color, width, opacity, lineJoin, lineCap, dashArray, dashOffset, graphicFill.build(), this.graphicStroke.build()); if (parent == null) { reset(); } return stroke; } @Override protected void buildStyleInternal(StyleBuilder sb) { sb.featureTypeStyle().rule().line().stroke().init(this); } }