package org.geotools.styling.builder; import javax.measure.quantity.Length; import javax.measure.unit.Unit; import org.geotools.Builder; import org.geotools.styling.LineSymbolizer; import org.geotools.styling.RasterSymbolizer; import org.opengis.filter.expression.Expression; import org.opengis.style.OverlapBehavior; import org.opengis.style.PolygonSymbolizer; import org.opengis.style.Symbolizer; /** * * * @source $URL$ */ public class RasterSymbolizerBuilder extends AbstractStyleBuilder<RasterSymbolizer> { private String name; private Expression geometry; private DescriptionBuilder description = new DescriptionBuilder().unset(); private Unit<?> uom; private Expression opacity; private ChannelSelectionBuilder channelSelection = new ChannelSelectionBuilder(this).unset(); private ColorMapBuilder colorMap = new ColorMapBuilder(this).unset(); private OverlapBehavior overlapsBehaviour; private ContrastEnhancementBuilder contrast = new ContrastEnhancementBuilder(this).unset(); private ShadedReliefBuilder shadedRelief = new ShadedReliefBuilder(this).unset(); private Builder<? extends Symbolizer> outline; public RasterSymbolizerBuilder() { this(null); } public RasterSymbolizerBuilder(AbstractStyleBuilder<?> parent) { super(parent); reset(); } public RasterSymbolizerBuilder name(String name) { this.name = name; unset = false; return this; } public DescriptionBuilder description() { unset = false; return description; } public RasterSymbolizerBuilder geometry(Expression geometry) { this.geometry = geometry; this.unset = false; return this; } public RasterSymbolizerBuilder geometry(String cqlExpression) { return geometry(cqlExpression(cqlExpression)); } public RasterSymbolizerBuilder opacity(Expression opacity) { this.opacity = opacity; this.unset = false; return this; } public RasterSymbolizerBuilder opacity(double opacity) { return opacity(literal(opacity)); } public RasterSymbolizerBuilder opacity(String cqlExpression) { return opacity(cqlExpression(cqlExpression)); } public RasterSymbolizerBuilder uom(Unit<Length> uom) { unset = false; this.uom = uom; return this; } public ChannelSelectionBuilder channelSelection() { unset = false; return channelSelection; } public ColorMapBuilder colorMap() { unset = false; return colorMap; } public ContrastEnhancementBuilder contrastEnhancement() { unset = false; return contrast; } public ShadedReliefBuilder shadedRelief() { unset = false; return shadedRelief; } public RasterSymbolizerBuilder overlapBehavior(OverlapBehavior behavior) { unset = false; this.overlapsBehaviour = behavior; return this; } public RasterSymbolizer build() { if (unset) { return null; } RasterSymbolizer symbolizer = sf.rasterSymbolizer(name, geometry, description.build(), uom, opacity, channelSelection.build(), overlapsBehaviour, colorMap.build(), contrast.build(), shadedRelief.build(), outline != null ? outline.build() : null); return symbolizer; } public RasterSymbolizerBuilder reset() { opacity = literal(1.0); channelSelection.unset(); contrast.unset(); unset = false; outline = null; return this; } public RasterSymbolizerBuilder reset(RasterSymbolizer symbolizer) { if (symbolizer == null) { return reset(); } opacity = symbolizer.getOpacity(); channelSelection.reset(symbolizer.getChannelSelection()); colorMap.reset(symbolizer.getColorMap()); contrast.reset(symbolizer.getContrastEnhancement()); if (symbolizer.getImageOutline() instanceof LineSymbolizer) { this.outline = new LineSymbolizerBuilder().reset((LineSymbolizer) symbolizer .getImageOutline()); } else if (symbolizer.getImageOutline() instanceof PolygonSymbolizer) { this.outline = new PolygonSymbolizerBuilder().reset((PolygonSymbolizer) symbolizer .getImageOutline()); } unset = false; return this; } @Override protected void buildStyleInternal(StyleBuilder sb) { sb.featureTypeStyle().rule().raster().init(this); } @Override public RasterSymbolizerBuilder unset() { return (RasterSymbolizerBuilder) super.unset(); } }