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.ColorReplacement;
import org.geotools.styling.StyleFactory;
import org.opengis.filter.expression.Expression;
public class ColorReplacementBuilder<P> implements Builder<ColorReplacement> {
private StyleFactory sf = CommonFactoryFinder.getStyleFactory(null);
private P parent;
private ChildExpressionBuilder<ColorReplacementBuilder<P>> propertyName = new ChildExpressionBuilder<ColorReplacementBuilder<P>>(
this);
private List<ChildExpressionBuilder<ColorReplacementBuilder<P>>> mapping = new ArrayList<ChildExpressionBuilder<ColorReplacementBuilder<P>>>();
boolean unset = true; // current value is null
public ColorReplacementBuilder() {
this(null);
}
public ColorReplacementBuilder(P parent) {
this.parent = parent;
reset();
}
public ColorReplacement build() {
if (unset) {
return null;
}
List<Expression> list = new ArrayList<Expression>();
for( ChildExpressionBuilder<ColorReplacementBuilder<P>> expressionBuilder : mapping ){
list.add( expressionBuilder.build() );
}
Expression array[] = list.toArray(new Expression[list.size()]);
ColorReplacement replacement = sf.colorReplacement(propertyName.build(), array);
if( parent == null ){
reset();
}
return replacement;
}
public P end() {
return parent;
}
public ColorReplacementBuilder<P> reset() {
propertyName.reset().property("Raster");
mapping.clear();
unset = false;
return this;
}
public ColorReplacementBuilder<P> reset(ColorReplacement replacement) {
if (replacement == null) {
return unset();
}
propertyName.reset( replacement.getRecoding() );
mapping.clear();
unset = false;
return this;
}
public ColorReplacementBuilder<P> unset() {
propertyName.unset();
mapping.clear();
unset = true;
return this;
}
}