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
|