package org.geotools.styling.builder;
import org.geotools.styling.Mark;
import org.opengis.filter.expression.Expression;
/**
*
*
* @source $URL$
*/
public class MarkBuilder extends AbstractStyleBuilder<Mark> {
StrokeBuilder strokeBuilder = new StrokeBuilder(this).unset();
FillBuilder fill = new FillBuilder(this).unset();
ExternalMarkBuilder externalMark = new ExternalMarkBuilder(this);
Expression wellKnownName;
public MarkBuilder() {
this(null);
}
MarkBuilder(GraphicBuilder parent) {
super(parent);
reset();
}
public MarkBuilder name(Expression name) {
this.wellKnownName = name;
this.externalMark.unset();
return this;
}
public MarkBuilder name(String name) {
return name(literal(name));
}
public ExternalMarkBuilder externalMark() {
return externalMark;
}
public StrokeBuilder stroke() {
return strokeBuilder;
}
public FillBuilder fill() {
return fill;
}
public MarkBuilder reset() {
// TODO: where is the default mark?
this.wellKnownName = literal("square");
this.externalMark.unset();
this.strokeBuilder.reset();
this.fill.unset();
this.stroke().unset();
this.unset = false;
return this;
}
public Mark build() {
if (unset) {
return null;
}
Mark mark = null;
if (!externalMark.isUnset()) {
mark = sf.mark(externalMark.build(), fill.build(), strokeBuilder.build());
}
if (wellKnownName != null) {
mark = sf.mark(wellKnownName, fill.build(), strokeBuilder.build());
}
if (parent == null) {
reset();
}
return mark;
}
public MarkBuilder reset(Mark mark) {
return reset((org.opengis.style.Mark) mark);
}
public MarkBuilder reset(org.opengis.style.Mark mark) {
if (mark == null) {
return unset();
}
this.wellKnownName = mark.getWellKnownName();
this.externalMark.reset(mark.getExternalMark());
this.strokeBuilder.reset(mark.getStroke());
this.fill.reset(mark.getFill());
this.unset = false;
return this;
}
public MarkBuilder unset() {
return (MarkBuilder) super.unset();
}
protected void buildStyleInternal(StyleBuilder sb) {
sb.featureTypeStyle().rule().point().graphic().mark().init(this);
}
}