package org.geotools.styling.builder; import org.geotools.Builder; import org.geotools.styling.NamedLayer; import org.geotools.styling.StyledLayer; import org.geotools.styling.UserLayer; public class StyledLayerBuilder<P> implements Builder<StyledLayer> { private P parent; protected Builder<? extends StyledLayer> delegate; public StyledLayerBuilder(){ this( null ); } public StyledLayerBuilder(P parent){ this.parent = parent; reset(); } public StyledLayer build() { if( delegate == null ){ return null; } StyledLayer styledLayer = delegate.build(); if( parent == null ) reset(); return styledLayer; } @SuppressWarnings("unchecked") UserLayerBuilder<P> user(){ if( delegate == null || !(delegate instanceof UserLayerBuilder<?>)){ delegate = new UserLayerBuilder<P>(parent); } return (UserLayerBuilder<P>) delegate; } @SuppressWarnings("unchecked") NamedLayerBuilder<P> named(){ if( delegate == null || !(delegate instanceof NamedLayerBuilder<?>)){ delegate = new NamedLayerBuilder<P>(parent); } return (NamedLayerBuilder<P>) delegate; } public P end(){ return parent; } public StyledLayerBuilder<P> reset() { delegate = new NamedLayerBuilder<P>(parent); return this; } public StyledLayerBuilder<P> unset() { delegate = null; return this; } public StyledLayerBuilder<P> reset(StyledLayer layer) { if( layer == null ){ return reset(); } if( layer instanceof NamedLayer ){ delegate = new NamedLayerBuilder<P>().reset( (NamedLayer) layer ); } else if (layer instanceof UserLayer){ delegate = new UserLayerBuilder<P>(parent).reset( (UserLayer) layer ); } return this; } }