package org.geotools.styling.builder;
import javax.measure.quantity.Length;
import javax.measure.unit.Unit;
import org.geotools.styling.LineSymbolizer;
import org.geotools.styling.Stroke;
import org.opengis.filter.expression.Expression;
/**
*
*
* @source $URL$
*/
public class LineSymbolizerBuilder extends AbstractStyleBuilder<LineSymbolizer> {
StrokeBuilder strokeBuilder = new StrokeBuilder(this);
Expression geometry = null;
Unit<Length> uom = null;
public LineSymbolizerBuilder() {
this(null);
}
LineSymbolizerBuilder(AbstractStyleBuilder<?> parent) {
super(parent);
reset();
}
public LineSymbolizerBuilder geometry(Expression geometry) {
this.geometry = geometry;
return this;
}
public LineSymbolizerBuilder geometry(String cqlExpression) {
return geometry(cqlExpression(cqlExpression));
}
public StrokeBuilder stroke() {
unset = false;
return strokeBuilder;
}
public LineSymbolizerBuilder uom(Unit<Length> uom) {
unset = false;
this.uom = uom;
return this;
}
public LineSymbolizer build() {
if (unset) {
return null; // builder was constructed but never used
}
Stroke stroke = strokeBuilder.build();
if (stroke == null) {
stroke = Stroke.DEFAULT;
}
LineSymbolizer ls = sf.createLineSymbolizer(stroke, null);
if (geometry != null) {
ls.setGeometry(geometry);
}
if (uom != null) {
ls.setUnitOfMeasure(uom);
}
if (parent == null) {
reset();
}
return ls;
}
public LineSymbolizerBuilder reset() {
strokeBuilder.reset();
geometry = null;
unset = false;
uom = null;
return this;
}
public LineSymbolizerBuilder reset(LineSymbolizer original) {
if (original == null) {
return unset();
}
geometry = original.getGeometry();
strokeBuilder.reset(original.getStroke());
uom = original.getUnitOfMeasure();
return this;
}
public LineSymbolizerBuilder reset(org.opengis.style.LineSymbolizer original) {
if (original instanceof LineSymbolizer) {
return reset((LineSymbolizer) original);
}
if (original == null) {
return unset();
}
geometry = property(original.getGeometryPropertyName());
strokeBuilder.reset(original.getStroke());
uom = original.getUnitOfMeasure();
return this;
}
public LineSymbolizerBuilder unset() {
return (LineSymbolizerBuilder) super.unset();
}
protected void buildStyleInternal(StyleBuilder sb) {
sb.featureTypeStyle().rule().line().init(this);
}
}