package org.geotools.styling.builder;
import java.util.ArrayList;
import java.util.List;
import org.geotools.Builder;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.expression.ChildExpressionBuilder;
import org.geotools.styling.Font;
import org.geotools.styling.StyleFactory;
import org.opengis.filter.expression.Expression;
public class FontBuilder<P> implements Builder<Font> {
private StyleFactory sf = CommonFactoryFinder.getStyleFactory(null);
private P parent;
private ChildExpressionBuilder<FontBuilder<P>> x = new ChildExpressionBuilder<FontBuilder<P>>(this);
private ChildExpressionBuilder<FontBuilder<P>> y = new ChildExpressionBuilder<FontBuilder<P>>(this);
boolean unset = true; // current value is null
private List<ChildExpressionBuilder<GraphicBuilder<P>>> family;
private ChildExpressionBuilder<GraphicBuilder<P>> style;
private ChildExpressionBuilder<GraphicBuilder<P>> weight;
private ChildExpressionBuilder<GraphicBuilder<P>> size;
public FontBuilder(){
parent = null;
reset();
}
public FontBuilder(P parent){
this.parent = parent;
reset();
}
public Font build() {
if( unset ){
return null;
}
List<Expression> list = new ArrayList<Expression>();
for(ChildExpressionBuilder<?> face : family ){
list.add( face.build() );
}
Font font = sf.font( list, style.build(), weight.build(), size.build() );
return font;
}
public P end(){
return parent;
}
public FontBuilder<P> reset() {
x.reset().literal(0);
y.reset().literal(0);
unset = false;
return this;
}
public FontBuilder<P> reset(Font font) {
if( font == null ){
return reset();
}
unset = false;
return this;
}
public FontBuilder<P> unset() {
unset = true;
return this;
}
}