Author: aaime Date: 2012-04-15 17:52:09 -0700 (Sun, 15 Apr 2012) New Revision: 38672 Added: trunk/modules/library/render/src/test/java/org/geotools/renderer/style/OpacityFinderTest.java trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster-cmalpha.sld trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster.sld Modified: trunk/modules/library/render/src/main/java/org/geotools/renderer/lite/OpacityFinder.java Log: [GEOT-4102] Enable OpacityFinder to handle RasterSymbolizer, patch by Frank Gasdorf with additions by yours truly Modified: trunk/modules/library/render/src/main/java/org/geotools/renderer/lite/OpacityFinder.java =================================================================== --- trunk/modules/library/render/src/main/java/org/geotools/renderer/lite/OpacityFinder.java 2012-04-16 00:35:58 UTC (rev 38671) +++ trunk/modules/library/render/src/main/java/org/geotools/renderer/lite/OpacityFinder.java 2012-04-16 00:52:09 UTC (rev 38672) @@ -51,17 +51,17 @@ import org.opengis.filter.expression.Expression; import org.opengis.filter.expression.Literal; - /** * Searches for translucent symbolizers - * + * * @author jones - * - * + * + * * @source $URL$ */ public class OpacityFinder implements StyleVisitor { private Class[] acceptableTypes; + public boolean hasOpacity; public OpacityFinder(Class[] acceptableTypes) { @@ -70,7 +70,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Style) */ public void visit(Style style) { @@ -87,7 +87,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Rule) */ public void visit(Rule rule) { @@ -104,7 +104,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.FeatureTypeStyle) */ public void visit(FeatureTypeStyle fts) { @@ -121,7 +121,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Fill) */ public void visit(Fill fill) { @@ -150,6 +150,13 @@ } else if (obj instanceof Byte) { Byte i = (Byte) obj; opacity = i.floatValue(); + } else if (obj instanceof String) { + try { + Double value = Double.valueOf((String) obj); + opacity = value.floatValue(); + } catch (NumberFormatException e) { + return; + } } else { return; } @@ -162,7 +169,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Stroke) */ public void visit(Stroke stroke) { @@ -171,7 +178,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Symbolizer) */ public void visit(Symbolizer sym) { @@ -189,11 +196,16 @@ PolygonSymbolizer ps = (PolygonSymbolizer) sym; ps.accept(this); } + + if (sym instanceof RasterSymbolizer) { + RasterSymbolizer rs = (RasterSymbolizer) sym; + rs.accept(this); + } } /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.PointSymbolizer) */ public void visit(PointSymbolizer ps) { @@ -216,33 +228,33 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.LineSymbolizer) */ public void visit(LineSymbolizer line) { if (isAcceptable(line)) { - if( line.getStroke()!=null ) - line.getStroke().accept(this); + if (line.getStroke() != null) + line.getStroke().accept(this); } } /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.PolygonSymbolizer) */ public void visit(PolygonSymbolizer poly) { if (isAcceptable(poly)) { - if( poly.getStroke()!=null ) + if (poly.getStroke() != null) poly.getStroke().accept(this); - if( poly.getFill()!=null) + if (poly.getFill() != null) poly.getFill().accept(this); } } /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.TextSymbolizer) */ public void visit(TextSymbolizer text) { @@ -250,16 +262,23 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.RasterSymbolizer) */ public void visit(RasterSymbolizer raster) { - // TODO Auto-generated method stub + if (isAcceptable(raster)) { + if (raster.getOpacity() != null) { + checkOpacity(raster.getOpacity()); + } + if (raster.getColorMap() != null) { + raster.getColorMap().accept(this); + } + } } /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Graphic) */ public void visit(Graphic gr) { @@ -268,7 +287,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Mark) */ public void visit(Mark mark) { @@ -277,7 +296,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.ExternalGraphic) */ public void visit(ExternalGraphic exgr) { @@ -286,7 +305,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.PointPlacement) */ public void visit(PointPlacement pp) { @@ -295,7 +314,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.AnchorPoint) */ public void visit(AnchorPoint ap) { @@ -304,7 +323,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Displacement) */ public void visit(Displacement dis) { @@ -313,7 +332,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.LinePlacement) */ public void visit(LinePlacement lp) { @@ -322,7 +341,7 @@ /* * (non-Javadoc) - * + * * @see org.geotools.styling.StyleVisitor#visit(org.geotools.styling.Halo) */ public void visit(Halo halo) { @@ -331,70 +350,73 @@ /** * DOCUMENT ME! - * + * * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } - public void visit(StyledLayerDescriptor sld) { - // TODO Auto-generated method stub - - } + public void visit(StyledLayerDescriptor sld) { + // TODO Auto-generated method stub - public void visit(NamedLayer layer) { - // TODO Auto-generated method stub - - } + } - public void visit(UserLayer layer) { - // TODO Auto-generated method stub - - } + public void visit(NamedLayer layer) { + // TODO Auto-generated method stub - public void visit(FeatureTypeConstraint ftc) { - // TODO Auto-generated method stub - - } + } - public void visit(ColorMap arg0) { - // TODO Auto-generated method stub - - } + public void visit(UserLayer layer) { + // TODO Auto-generated method stub - public void visit(ColorMapEntry arg0) { - // TODO Auto-generated method stub - - } + } - public void visit(ContrastEnhancement contrastEnhancement) { - // TODO Auto-generated method stub - - } + public void visit(FeatureTypeConstraint ftc) { + // TODO Auto-generated method stub - public void visit(ImageOutline outline) { - // TODO Auto-generated method stub - - } + } - public void visit(ChannelSelection cs) { - // TODO Auto-generated method stub - - } + public void visit(ColorMap cm) { + for (ColorMapEntry cme : cm.getColorMapEntries()) { + cme.accept(this); + } + } - public void visit(OverlapBehavior ob) { - // TODO Auto-generated method stub - - } + public void visit(ColorMapEntry cme) { + if(cme.getOpacity() != null) { + checkOpacity(cme.getOpacity()); + } - public void visit(SelectedChannelType sct) { - // TODO Auto-generated method stub - - } + } - public void visit(ShadedRelief sr) { - // TODO Auto-generated method stub - - } + public void visit(ContrastEnhancement contrastEnhancement) { + // TODO Auto-generated method stub + + } + + public void visit(ImageOutline outline) { + // TODO Auto-generated method stub + + } + + public void visit(ChannelSelection cs) { + // TODO Auto-generated method stub + + } + + public void visit(OverlapBehavior ob) { + // TODO Auto-generated method stub + + } + + public void visit(SelectedChannelType sct) { + // TODO Auto-generated method stub + + } + + public void visit(ShadedRelief sr) { + // TODO Auto-generated method stub + + } } Added: trunk/modules/library/render/src/test/java/org/geotools/renderer/style/OpacityFinderTest.java =================================================================== --- trunk/modules/library/render/src/test/java/org/geotools/renderer/style/OpacityFinderTest.java (rev 0) +++ trunk/modules/library/render/src/test/java/org/geotools/renderer/style/OpacityFinderTest.java 2012-04-16 00:52:09 UTC (rev 38672) @@ -0,0 +1,47 @@ +package org.geotools.renderer.style; + +import java.net.URL; + +import junit.framework.TestCase; + +import org.geotools.factory.CommonFactoryFinder; +import org.geotools.renderer.lite.OpacityFinder; +import org.geotools.styling.RasterSymbolizer; +import org.geotools.styling.SLDParser; +import org.geotools.styling.Style; +import org.geotools.styling.StyleFactory; +import org.geotools.test.TestData; + + +public class OpacityFinderTest extends TestCase { + + public void testRasterOpacity() throws Exception { + StyleFactory factory = CommonFactoryFinder.getStyleFactory(null); + URL styleURL = TestData.getResource(this, "raster.sld"); + + SLDParser stylereader = new SLDParser(factory, styleURL); + + Style style = stylereader.readXML()[0]; + + OpacityFinder opacityFinder = new OpacityFinder(new Class[] { RasterSymbolizer.class }); + + style.accept(opacityFinder); + + org.junit.Assert.assertTrue(opacityFinder.hasOpacity); + } + + public void testColorMapOpacity() throws Exception { + StyleFactory factory = CommonFactoryFinder.getStyleFactory(null); + URL styleURL = TestData.getResource(this, "raster-cmalpha.sld"); + + SLDParser stylereader = new SLDParser(factory, styleURL); + + Style style = stylereader.readXML()[0]; + + OpacityFinder opacityFinder = new OpacityFinder(new Class[] { RasterSymbolizer.class }); + + style.accept(opacityFinder); + + org.junit.Assert.assertTrue(opacityFinder.hasOpacity); + } +} Added: trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster-cmalpha.sld =================================================================== --- trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster-cmalpha.sld (rev 0) +++ trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster-cmalpha.sld 2012-04-16 00:52:09 UTC (rev 38672) @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" +xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" version="1.0.0"> + <UserLayer> + <Name>raster_layer</Name> + <LayerFeatureConstraints> + <FeatureTypeConstraint/> + </LayerFeatureConstraints> + <UserStyle> + <Name>raster</Name> + <Title>A boring default style</Title> + <Abstract>A sample style for rasters</Abstract> + <FeatureTypeStyle> + <FeatureTypeName>Feature</FeatureTypeName> + <Rule> + <RasterSymbolizer> + <ColorMap> + <ColorMapEntry color="#008000" quantity="70" /> + <ColorMapEntry color="#008000" quantity="256" opacity="0.5"/> + </ColorMap> + </RasterSymbolizer> + </Rule> + </FeatureTypeStyle> + </UserStyle> + </UserLayer> +</StyledLayerDescriptor> \ No newline at end of file Added: trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster.sld =================================================================== --- trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster.sld (rev 0) +++ trunk/modules/library/render/src/test/resources/org/geotools/renderer/style/test-data/raster.sld 2012-04-16 00:52:09 UTC (rev 38672) @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" +xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" version="1.0.0"> + <UserLayer> + <Name>raster_layer</Name> + <LayerFeatureConstraints> + <FeatureTypeConstraint/> + </LayerFeatureConstraints> + <UserStyle> + <Name>raster</Name> + <Title>A boring default style</Title> + <Abstract>A sample style for rasters</Abstract> + <FeatureTypeStyle> + <FeatureTypeName>Feature</FeatureTypeName> + <Rule> + <RasterSymbolizer> + <Opacity>.5</Opacity> + <ChannelSelection> + <RedChannel> + <SourceChannelName>11</SourceChannelName> + </RedChannel> + <GreenChannel> + <SourceChannelName>9</SourceChannelName> > + </GreenChannel> + <BlueChannel> + <SourceChannelName>1</SourceChannelName> + </BlueChannel> + </ChannelSelection> + </RasterSymbolizer> + </Rule> + </FeatureTypeStyle> + </UserStyle> + </UserLayer> +</StyledLayerDescriptor> \ No newline at end of file |