package org.geotools.styling.builder;
import org.geotools.Builder;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.styling.ExtensionSymbolizer;
import org.geotools.styling.LineSymbolizer;
import org.geotools.styling.PointSymbolizer;
import org.geotools.styling.PolygonSymbolizer;
import org.geotools.styling.RasterSymbolizer;
import org.geotools.styling.StyleFactory;
import org.geotools.styling.Symbolizer;
import org.geotools.styling.TextSymbolizer;
public class SymbolizerBuilder<P> implements Builder<Symbolizer> {
StyleFactory sf = CommonFactoryFinder.getStyleFactory(null);
P parent;
Builder<? extends Symbolizer> delegate = null; // initially unset
public SymbolizerBuilder() {
this( null );
}
public SymbolizerBuilder(P parent ){
this.parent = parent;
reset();
}
public PointSymbolizerBuilder<P> point(){
if( delegate == null || !(delegate instanceof PointSymbolizerBuilder)){
delegate = new PointSymbolizerBuilder<P>(parent);
}
return (PointSymbolizerBuilder<P>) delegate;
}
public LineSymbolizerBuilder<P> line(){
if( delegate == null || !(delegate instanceof LineSymbolizerBuilder)){
delegate = new LineSymbolizerBuilder<P>(parent);
}
return (LineSymbolizerBuilder<P>) delegate;
}
public PolygonSymbolizerBuilder<P> polygon(){
if( delegate == null || !(delegate instanceof PolygonSymbolizerBuilder)){
delegate = new PolygonSymbolizerBuilder<P>(parent);
}
return (PolygonSymbolizerBuilder<P>) delegate;
}
public TextSymbolizerBuilder<P> text(){
if( delegate == null || !(delegate instanceof TextSymbolizerBuilder)){
delegate = new TextSymbolizerBuilder<P>(parent);
}
return (TextSymbolizerBuilder<P>) delegate;
}
public RasterSymbolizerBuilder<P> raster(){
if( delegate == null || !(delegate instanceof RasterSymbolizerBuilder)){
delegate = new RasterSymbolizerBuilder<P>(parent);
}
return (RasterSymbolizerBuilder<P>) delegate;
}
public ExtensionSymbolizerBuilder<P> vendor(){
if( delegate == null || !(delegate instanceof ExtensionSymbolizerBuilder)){
delegate = new ExtensionSymbolizerBuilder<P>(parent);
}
return (ExtensionSymbolizerBuilder<P>) delegate;
}
public SymbolizerBuilder<P> unset() {
delegate = null;
return this;
}
@SuppressWarnings("unchecked")
public SymbolizerBuilder<P> reset() {
delegate = new PointSymbolizerBuilder(this).reset();
return this;
}
@SuppressWarnings("unchecked")
public SymbolizerBuilder<P> reset(Symbolizer symbolizer) {
if( symbolizer == null ){
return unset();
}
if( symbolizer instanceof PointSymbolizer){
delegate = new PointSymbolizerBuilder(this).reset((PointSymbolizer)symbolizer);
}
else if( symbolizer instanceof LineSymbolizer){
delegate = new LineSymbolizerBuilder(this).reset((LineSymbolizer)symbolizer);
}
else if( symbolizer instanceof PolygonSymbolizer){
delegate = new PolygonSymbolizerBuilder(this).reset((PolygonSymbolizer)symbolizer);
}
else if( symbolizer instanceof TextSymbolizer){
delegate = new TextSymbolizerBuilder(this).reset((TextSymbolizer)symbolizer);
}
else if( symbolizer instanceof RasterSymbolizer){
delegate = new RasterSymbolizerBuilder(this).reset((RasterSymbolizer)symbolizer);
}
else if( symbolizer instanceof ExtensionSymbolizer){
delegate = new ExtensionSymbolizerBuilder(this).reset((ExtensionSymbolizer)symbolizer);
}
return this;
}
public Symbolizer build() {
if(delegate == null){
return null;
}
Symbolizer symbolizer = delegate.build();
if( parent == null ) reset();
return symbolizer;
}
}