package org.geotools.styling.builder; import org.geotools.Builder; import org.geotools.factory.CommonFactoryFinder; import org.geotools.filter.expression.ChildExpressionBuilder; import org.geotools.filter.expression.ExpressionBuilder; import org.geotools.styling.Halo; import org.geotools.styling.StyleFactory; public class HaloBuilder<P> implements Builder<org.opengis.style.Halo> { StyleFactory sf = CommonFactoryFinder.getStyleFactory(null); P parent; boolean unset; ChildExpressionBuilder<HaloBuilder<P>> radius = new ChildExpressionBuilder<HaloBuilder<P>>(this); FillBuilder<HaloBuilder<P>> fill = new FillBuilder<HaloBuilder<P>>(this); public HaloBuilder() { this(null); } public HaloBuilder(P parent) { this.parent = parent; reset(); } /** * Set the HaloBuilder * <P> * to produce <code>node</code> * * @return current HaloBuilder * <P> * for chaining operations */ public HaloBuilder<P> unset() { unset = true; return this; } /** * Set the HaloBuilder * <P> * to produce a default Halo. * * @return current HaloBuilder * <P> * for chaining operations */ public HaloBuilder<P> reset() { unset = false; // radius.reset(); fill.reset(); return this; } /** * Set the HaloBuilder * <P> * to produce the provided Halo. * * @param halo * Halo under construction; if null HaloBuilder * <P> * will be unset() * @return current HaloBuilder * <P> * for chaining operations */ public HaloBuilder<P> reset(org.opengis.style.Halo halo) { if (halo == null) { return unset(); } fill = new FillBuilder<HaloBuilder<P>>(this).reset(halo.getFill()); radius = new ChildExpressionBuilder<HaloBuilder<P>>(this).reset(halo.getRadius()); return this; } public HaloBuilder<P> radius(Object radius) { this.radius.literal(radius); return this; } public ExpressionBuilder radius() { return radius; } public HaloBuilder<P> fill(Object color) { this.fill.color().literal(color); return this; } public FillBuilder<HaloBuilder<P>> fill() { return fill; } public Halo build() { if( unset ) return null; Halo halo = sf.createHalo(fill.build(), radius.build()); if( parent == null ) reset(); return halo; } }