package org.geotools.styling.builder;
import javax.measure.unit.Unit;
import org.geotools.Builder;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.expression.ChildExpressionBuilder;
import org.geotools.styling.RasterSymbolizer;
import org.geotools.styling.StyleFactory;
import org.opengis.filter.expression.Expression;
import org.opengis.style.ChannelSelection;
import org.opengis.style.ColorMap;
import org.opengis.style.ContrastEnhancement;
import org.opengis.style.Description;
import org.opengis.style.OverlapBehavior;
import org.opengis.style.ShadedRelief;
import org.opengis.style.Symbolizer;
public class RasterSymbolizerBuilder<P> implements Builder<RasterSymbolizer> {
private StyleFactory sf = CommonFactoryFinder.getStyleFactory(null);
private P parent;
private ChildExpressionBuilder<RasterSymbolizerBuilder<P>> x = new ChildExpressionBuilder<RasterSymbolizerBuilder<P>>(
this);
private ChildExpressionBuilder<RasterSymbolizerBuilder<P>> y = new ChildExpressionBuilder<RasterSymbolizerBuilder<P>>(
this);
boolean unset = true; // current value is null
private String name;
private Expression geometry;
private Description description;
private Unit<?> unit;
private Expression opacity;
private ChannelSelection channelSelection;
private OverlapBehavior overlapsBehaviour;
private ColorMap colorMap;
private ContrastEnhancement contrast;
private ShadedRelief shaded;
private Symbolizer outline;
public RasterSymbolizerBuilder() {
this( null );
}
public RasterSymbolizerBuilder(P parent) {
this.parent = parent;
reset();
}
public RasterSymbolizer build() {
if (unset) {
return null;
}
RasterSymbolizer symbolizer = sf.rasterSymbolizer(name, geometry, description, unit,
opacity, channelSelection, overlapsBehaviour, colorMap, contrast, shaded, outline);
return symbolizer;
}
public P end() {
return parent;
}
public RasterSymbolizerBuilder<P> reset() {
x.reset().literal(0);
y.reset().literal(0);
unset = false;
return this;
}
public RasterSymbolizerBuilder<P> reset(RasterSymbolizer symbolizer) {
if (symbolizer == null) {
return reset();
}
unset = false;
return this;
}
public RasterSymbolizerBuilder<P> unset() {
x.unset();
y.unset();
unset = true;
return this;
}
}