package org.geopublishing.atlasStyler.rulesLists; import static junit.framework.Assert.assertEquals; import java.io.IOException; import javax.xml.transform.TransformerException; import org.apache.tools.ant.filters.StringInputStream; import org.geotools.styling.ChannelSelection; import org.geotools.styling.ContrastEnhancement; import org.geotools.styling.FeatureTypeStyle; import org.geotools.styling.RasterSymbolizer; import org.geotools.styling.SelectedChannelType; import org.geotools.styling.Style; import org.geotools.styling.StyleBuilder; import org.geotools.styling.visitor.DuplicatingStyleVisitor; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.opengis.style.ContrastMethod; import org.xml.sax.SAXException; import de.schmitzm.geotools.FilterUtil; import de.schmitzm.geotools.styling.StyledGridCoverageReader; import de.schmitzm.geotools.styling.StylingUtil; import de.schmitzm.geotools.testing.GTTestingUtil; import de.schmitzm.testing.TestingClass; public class RasterRulesListRGBTest extends TestingClass { private StyledGridCoverageReader styledRaster; @Before public void setup() throws IOException { styledRaster = GTTestingUtil.TestDatasetsRaster.geotiffRGBWithoutSLD .getStyled(); } @Test @Ignore public void testRasterRGBImportExport1() { RasterRulesListRGB rl = new RasterRulesListRGB(styledRaster, true); rl.setChannelMethod(1, ContrastMethod.HISTOGRAM); rl.setChannelMethod(2, ContrastMethod.NORMALIZE); rl.setChannelMethod(3, ContrastMethod.NONE); rl.setGammaValue(1, 1.2); rl.setGammaValue(2, 0.1); rl.setGammaValue(3, 2.); rl.setRSGamma(1.1); assertEquals(1, rl.getChannel(1)); assertEquals(2, rl.getChannel(2)); assertEquals(3, rl.getChannel(3)); assertEquals(1.2, Double.valueOf(rl.getGammaValue(1).toString())); assertEquals(0.1, Double.valueOf(rl.getGammaValue(2).toString())); assertEquals(2., Double.valueOf(rl.getGammaValue(3).toString())); assertEquals(1.1, Double.valueOf(rl.getRSGamma().toString())); FeatureTypeStyle fts = rl.getFTS(); RasterRulesListRGB rl2 = new RasterRulesListRGB(styledRaster, true); rl2.importFts(fts); assertEquals(1, rl2.getChannel(1)); assertEquals(ContrastMethod.HISTOGRAM, rl2.getChannelMethod(1)); assertEquals(ContrastMethod.NORMALIZE, rl2.getChannelMethod(2)); assertEquals(ContrastMethod.NONE, rl2.getChannelMethod(3)); assertEquals(2, rl2.getChannel(2)); assertEquals(3, rl2.getChannel(3)); assertEquals(1.2, Double.valueOf(rl.getGammaValue(1).toString())); assertEquals(0.1, Double.valueOf(rl.getGammaValue(2).toString())); assertEquals(2., Double.valueOf(rl.getGammaValue(3).toString())); assertEquals(1.1, Double.valueOf(rl.getRSGamma().toString())); } @Test @Ignore public void testRasterRGBImportExport2() { RasterRulesListRGB rl = new RasterRulesListRGB(styledRaster, true); rl.setOpacity(0.6); rl.setEnabled(false); rl.setChannel(1, 3); rl.setChannel(2, 2); rl.setChannel(3, 1); rl.setMaxScaleDenominator(200); rl.setMinScaleDenominator(100); FeatureTypeStyle fts = rl.getFTS(); RasterRulesListRGB rl2 = new RasterRulesListRGB(styledRaster, true); rl2.importFts(fts); assertEquals(.6, rl2.getOpacity(), 0.00000001); assertEquals(false, rl2.isEnabled()); assertEquals(100, rl2.getMinScaleDenominator(), 0); assertEquals(200, rl2.getMaxScaleDenominator(), 0); assertEquals(3, rl2.getChannel(1)); assertEquals(2, rl2.getChannel(2)); assertEquals(1, rl2.getChannel(3)); } /** * TextSymbolizer2 specific properties saved and laoded again must fit */ @Test @Ignore public void testRasterSymbolizer_inAndOut() throws TransformerException, SAXException, IOException { StyleBuilder sb = new StyleBuilder(); RasterSymbolizer rs = StylingUtil.STYLE_FACTORY .createRasterSymbolizer(); // Create a Graphic with two recognizable values rs.setOpacity(FilterUtil.FILTER_FAC2.literal(0.7)); ContrastEnhancement ceRs = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); ceRs.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.4)); // ceRs.setMethod(ContrastMethod.HISTOGRAM); ceRs.setType(FilterUtil.FILTER_FAC2.literal("HISTOGRAM")); // ceRs.setHistogram(); rs.setContrastEnhancement(ceRs); ContrastEnhancement ceRed = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); // ceRed.setMethod(ContrastMethod.HISTOGRAM); // ceRed.setHistogram(); ceRed.setType(FilterUtil.FILTER_FAC2.literal("HISTOGRAM")); ceRed.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.1)); ContrastEnhancement ceGreen = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); // ceGreen.setMethod(ContrastMethod.NORMALIZE); // ceGreen.setNormalize(); ceGreen.setType(FilterUtil.FILTER_FAC2.literal("NORMALIZE")); ceGreen.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.2)); ContrastEnhancement ceBlue = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); // ceBlue.setMethod(ContrastMethod.NONE); ceBlue.setType(FilterUtil.FILTER_FAC2.literal("NONE")); ceBlue.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.3)); SelectedChannelType redT = StylingUtil.STYLE_FACTORY .createSelectedChannelType("1", ceRed); SelectedChannelType greenT = StylingUtil.STYLE_FACTORY .createSelectedChannelType("2", ceGreen); SelectedChannelType blueT = StylingUtil.STYLE_FACTORY .createSelectedChannelType("3", ceBlue); ChannelSelection cs = StylingUtil.STYLE_FACTORY.channelSelection(redT, greenT, blueT); rs.setChannelSelection(cs); // A first check of the XML // assertXpathEvaluatesTo("1", "count(/sld:TextSymbolizer/sld:Graphic)", // doc); // assertXpathEvaluatesTo("1", "count(/sld:TextSymbolizer/sld:Snippet)", // doc); // assertXpathEvaluatesTo("1", // "count(/sld:TextSymbolizer/sld:OtherText)", doc); // assertXpathEvaluatesTo("1", // "count(/sld:TextSymbolizer/sld:FeatureDescription)", doc); // Transform and reimport and compare String xml = StylingUtil.sldToString(sb.createStyle(rs)); Style importedStyle = StylingUtil.loadSLD(new StringInputStream(xml))[0]; RasterSymbolizer copy = (RasterSymbolizer) importedStyle .featureTypeStyles().get(0).rules().get(0).symbolizers().get(0); // compare it assertEquals( "Opacity of RasterSymbolizer has not been correctly ex- and reimported", rs.getOpacity(), copy.getOpacity()); assertEquals("1", copy.getChannelSelection().getRGBChannels()[0].getChannelName()); assertEquals("2", copy.getChannelSelection().getRGBChannels()[1].getChannelName()); assertEquals("3", copy.getChannelSelection().getRGBChannels()[2].getChannelName()); assertEquals(ContrastMethod.HISTOGRAM, copy.getChannelSelection() .getRGBChannels()[0].getContrastEnhancement().getMethod()); assertEquals(ContrastMethod.NORMALIZE, copy.getChannelSelection() .getRGBChannels()[1].getContrastEnhancement().getMethod()); assertEquals(null, copy.getChannelSelection().getRGBChannels()[2] .getContrastEnhancement().getMethod()); assertEquals("0.1", copy.getChannelSelection().getRGBChannels()[0] .getContrastEnhancement().getGammaValue().toString()); assertEquals("0.2", copy.getChannelSelection().getRGBChannels()[1] .getContrastEnhancement().getGammaValue().toString()); assertEquals("0.3", copy.getChannelSelection().getRGBChannels()[2] .getContrastEnhancement().getGammaValue().toString()); assertEquals(ContrastMethod.HISTOGRAM, copy.getContrastEnhancement() .getMethod()); assertEquals("0.4", copy.getContrastEnhancement().getGammaValue() .toString()); } @Test @Ignore public void testRasterSymbolizer_inAndOut2() throws TransformerException, SAXException, IOException { StyleBuilder sb = new StyleBuilder(); RasterSymbolizer rs = StylingUtil.STYLE_FACTORY .createRasterSymbolizer(); // Create a Graphic with two recognizable values rs.setOpacity(FilterUtil.FILTER_FAC2.literal(0.7)); ContrastEnhancement ceRs = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); ceRs.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.4)); // ceRs.setMethod(ContrastMethod.HISTOGRAM); ceRs.setHistogram(); rs.setContrastEnhancement(ceRs); ContrastEnhancement ceRed = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); ceRed.setType(FilterUtil.FILTER_FAC2.literal("HISTOGRAM")); ceRed.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.1)); ceRed.getType(); ContrastEnhancement ceGreen = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); ceGreen.setType(FilterUtil.FILTER_FAC2.literal("Normalize")); ceGreen.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.2)); ContrastEnhancement ceBlue = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); ceBlue.setType(FilterUtil.FILTER_FAC2.literal("None")); ceBlue.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.3)); SelectedChannelType redT = StylingUtil.STYLE_FACTORY .createSelectedChannelType("1", ceRed); SelectedChannelType greenT = StylingUtil.STYLE_FACTORY .createSelectedChannelType("2", ceGreen); SelectedChannelType blueT = StylingUtil.STYLE_FACTORY .createSelectedChannelType("3", ceBlue); ChannelSelection cs = StylingUtil.STYLE_FACTORY.channelSelection(redT, greenT, blueT); rs.setChannelSelection(cs); rs.getChannelSelection().getRGBChannels()[0].getContrastEnhancement() .getMethod(); // A first check of the XML DuplicatingStyleVisitor dsv = StylingUtil.DUPLICATINGSTYLEVISITOR; dsv.visit(rs); RasterSymbolizer copy = (RasterSymbolizer) dsv.getCopy(); // compare it assertEquals( "Opacity of RasterSymbolizer has not been correctly ex- and reimported", rs.getOpacity(), copy.getOpacity()); assertEquals("1", copy.getChannelSelection().getRGBChannels()[0].getChannelName()); assertEquals("2", copy.getChannelSelection().getRGBChannels()[1].getChannelName()); assertEquals("3", copy.getChannelSelection().getRGBChannels()[2].getChannelName()); assertEquals("0.1", copy.getChannelSelection().getRGBChannels()[0] .getContrastEnhancement().getGammaValue().toString()); assertEquals("0.2", copy.getChannelSelection().getRGBChannels()[1] .getContrastEnhancement().getGammaValue().toString()); assertEquals("0.3", copy.getChannelSelection().getRGBChannels()[2] .getContrastEnhancement().getGammaValue().toString()); assertEquals("0.4", copy.getContrastEnhancement().getGammaValue() .toString()); assertEquals(ContrastMethod.HISTOGRAM, rs.getContrastEnhancement() .getMethod()); assertEquals(ContrastMethod.HISTOGRAM, copy.getChannelSelection() .getRGBChannels()[0].getContrastEnhancement().getMethod()); assertEquals(ContrastMethod.NORMALIZE, copy.getChannelSelection() .getRGBChannels()[1].getContrastEnhancement().getMethod()); assertEquals(null, copy.getChannelSelection().getRGBChannels()[2] .getContrastEnhancement().getMethod()); } @Test @Ignore public void testRasterSymbolizer_ceHandling() throws TransformerException { StyleBuilder sb = new StyleBuilder(); RasterSymbolizer rs = StylingUtil.STYLE_FACTORY .createRasterSymbolizer(); ContrastEnhancement ceRs = StylingUtil.STYLE_FACTORY .createContrastEnhancement(); ceRs.setGammaValue(FilterUtil.FILTER_FAC2.literal(0.4)); rs.setContrastEnhancement(ceRs); // DuplicatingStyleVisitor dsv = StylingUtil.DUPLICATINGSTYLEVISITOR; // dsv.visit(rs); // // RasterSymbolizer copy = (RasterSymbolizer) dsv.getCopy(); String xml = StylingUtil.sldToString(sb.createStyle(rs)); Style importedStyle = StylingUtil.loadSLD(new StringInputStream(xml))[0]; RasterSymbolizer copy = (RasterSymbolizer) importedStyle .featureTypeStyles().get(0).rules().get(0).symbolizers().get(0); assertEquals("0.4", copy.getContrastEnhancement().getGammaValue() .toString()); } }