package org.geotools.styling.builder; import java.awt.Color; import org.geotools.styling.Fill; import org.geotools.util.Converters; import org.opengis.filter.expression.Expression; /** * * * @source $URL$ */ public class FillBuilder extends AbstractStyleBuilder<org.opengis.style.Fill> { Expression color; Expression opacity; GraphicBuilder graphic = new GraphicBuilder(this).unset(); /** * Create a FillBuilder on its own; not part of a larger data structure. */ public FillBuilder() { this(null); } public FillBuilder(AbstractStyleBuilder<?> parent) { super(parent); reset(); } public FillBuilder color(Expression color) { this.unset = false; this.color = color; return this; } public FillBuilder color(Color color) { return color(literal(color)); } public FillBuilder color(String cqlExpression) { return color(cqlExpression(cqlExpression)); } public FillBuilder 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 FillBuilder opacity(Expression opacity) { this.unset = false; this.opacity = opacity; return this; } public FillBuilder opacity(double opacity) { return opacity(literal(opacity)); } public FillBuilder opacity(String cqlExpression) { return opacity(cqlExpression(cqlExpression)); } public GraphicBuilder graphicFill() { unset = false; return graphic; } /** * Build Fill as defined; FillBuilder will be reset after this use. * * @return Created Fill as defined */ public Fill build() { if (unset) { return null; } Fill fill = sf.createFill(color, null, opacity, graphic.build()); if (parent == null) { reset(); } return fill; } public FillBuilder unset() { return (FillBuilder) super.unset(); } /** * Reset to produce the default Fill. */ public FillBuilder reset() { unset = false; color = Fill.DEFAULT.getColor(); opacity = Fill.DEFAULT.getOpacity(); graphic.unset(); return this; } public FillBuilder reset(org.opengis.style.Fill original) { if (original == null) { return unset(); } unset = false; color = original.getColor(); opacity = original.getOpacity(); graphic.reset(original.getGraphicFill()); return this; } @Override protected void buildStyleInternal(StyleBuilder sb) { sb.featureTypeStyle().rule().polygon().fill().init(this); } }