package org.geotools.styling.builder; import org.geotools.Builder; import org.geotools.factory.CommonFactoryFinder; import org.geotools.filter.expression.ChildExpressionBuilder; import org.geotools.styling.Fill; import org.geotools.styling.StyleFactory; public class FillBuilder<P> implements Builder<org.opengis.style.Fill>{ private P parent; StyleFactory sf = CommonFactoryFinder.getStyleFactory(null); ChildExpressionBuilder<FillBuilder<P>> color = new ChildExpressionBuilder<FillBuilder<P>>(this).unset(); ChildExpressionBuilder<FillBuilder<P>> opacity = new ChildExpressionBuilder<FillBuilder<P>>(this).unset(); GraphicBuilder<FillBuilder<P>> graphic = new GraphicBuilder<FillBuilder<P>>(this).unset(); private boolean unset = false; /** * Create a FillBuilder on its own; not part of a larger data structure. */ public FillBuilder(){ this( null); } public FillBuilder(P parent) { this.parent = parent; reset(); } public FillBuilder<P> color(Object color) { this.color.literal( color ); unset = false; return this; } public FillBuilder<P> opacity( Object opacity) { this.opacity.literal( opacity ); unset = false; return this; } public ChildExpressionBuilder<FillBuilder<P>> opacity(){ unset = false; return opacity; } public GraphicBuilder graphicFill() { unset = false; return graphic; } public ChildExpressionBuilder<FillBuilder<P>> color(){ this.unset = false; return color; } /** * 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.build(), null, opacity.build(), graphic.build() ); reset(); return fill; } public P end(){ return parent; } public FillBuilder<P> unset() { unset = true; return this; } /** * Reset to produce the default Fill. */ public FillBuilder<P> reset() { unset = false; color.reset( Fill.DEFAULT.getColor() ); opacity.reset( Fill.DEFAULT.getOpacity() ); graphic.reset(); return this; } public FillBuilder<P> reset(org.opengis.style.Fill original) { unset = false; color.reset( original.getColor() ); opacity.reset( original.getOpacity() ); graphic.reset( original.getGraphicFill() ); return this; } }