Package org.geotools.sld.v1_1

Source Code of org.geotools.sld.v1_1.SLDExampleTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2010, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.sld.v1_1;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.util.List;

import junit.framework.TestCase;

import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.Graphic;
import org.geotools.styling.LineSymbolizer;
import org.geotools.styling.NamedLayer;
import org.geotools.styling.PointSymbolizer;
import org.geotools.styling.PolygonSymbolizer;
import org.geotools.styling.Rule;
import org.geotools.styling.Style;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.styling.TextSymbolizer;
import org.geotools.xml.Parser;
import org.opengis.style.ExternalGraphic;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
*
*
* @source $URL$
*/
public class SLDExampleTest extends TestCase {

    public void testParseSLD() throws Exception {
        /*
        <StyledLayerDescriptor version="1.1.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld"
        xmlns:ogc="http://www.opengis.net/ogc" xmlns:se="http://www.opengis.net/se" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <NamedLayer>
                        <se:Name>OCEANSEA_1M:Foundation</se:Name>
                        <UserStyle>
                                <se:Name>GEOSYM</se:Name>
                                <IsDefault>1</IsDefault>
                                <se:FeatureTypeStyle>
                                        <se:FeatureTypeName>Foundation</se:FeatureTypeName>
                                        <se:Rule>
                                                <se:Name>main</se:Name>
                                                <se:PolygonSymbolizer uom="http://www.opengis.net/sld/units/pixel">
                                                        <se:Name>MySymbol</se:Name>
                                                        <se:Description>
                                                                <se:Title>Example Symbol</se:Title>
                                                                <se:Abstract>This is just a simple example.</se:Abstract>
                                                        </se:Description>
                                                        <se:Geometry>
                                                                <ogc:PropertyName>GEOMETRY</ogc:PropertyName>
                                                        </se:Geometry>
                                                        <se:Fill>
                                                                <se:SvgParameter name="fill">#96C3F5</se:SvgParameter>
                                                        </se:Fill>
                                                </se:PolygonSymbolizer>
                                        </se:Rule>
                                </se:FeatureTypeStyle>
                        </UserStyle>
                </NamedLayer>
        </StyledLayerDescriptor>*/

        StyledLayerDescriptor sld = (StyledLayerDescriptor) parse("example-sld.xml");
        assertEquals(1, sld.getStyledLayers().length);
       
        NamedLayer l = (NamedLayer) sld.getStyledLayers()[0];
        assertEquals("OCEANSEA_1M:Foundation", l.getName());
       
        assertEquals(1, l.getStyles().length);
        Style s = l.getStyles()[0];
        assertEquals("GEOSYM", s.getName());
        assertTrue(s.isDefault());
       
        assertEquals(1, s.getFeatureTypeStyles().length);
        FeatureTypeStyle fts = s.getFeatureTypeStyles()[0];
       
        assertEquals("Foundation", fts.getFeatureTypeName());
        assertEquals(1, fts.rules().size());
       
        Rule r = fts.rules().get(0);
        assertEquals("main", r.getName());
        assertEquals(1, r.symbolizers().size());
       
        PolygonSymbolizer sym = (PolygonSymbolizer) r.symbolizers().get(0);
    }
   
    public void testParseGraphicFill() throws Exception {
        StyledLayerDescriptor sld = (StyledLayerDescriptor) parse("../graphicFill.xml");
        NamedLayer layer = (NamedLayer) sld.getStyledLayers()[0];
        PolygonSymbolizer ps = (PolygonSymbolizer) layer.getStyles()[0].featureTypeStyles().get(0).rules().get(0).symbolizers().get(0);
        Graphic graphicFill = ps.getFill().getGraphicFill();
        assertNotNull(graphicFill);
        ExternalGraphic eg = (ExternalGraphic) graphicFill.graphicalSymbols().get(0);
        assertEquals(new URI("http://maps.google.com/mapfiles/kml/pal2/icon4.png"), eg.getOnlineResource().getLinkage());
       
    }
   
    Object parse(String filename) throws Exception {
        SLDConfiguration sld = new SLDConfiguration();
        InputStream location = getClass().getResourceAsStream(filename);
        return new Parser(sld).parse(location);
    }
   
    List validate(String filename) throws Exception {
        SLDConfiguration sld = new SLDConfiguration();
        InputStream location = getClass().getResourceAsStream(filename);
        Parser p = new Parser(sld);
        p.validate(location);
        return p.getValidationErrors();
    }
   
    public void testParseSldWithExternalEntities() throws Exception {
        // this SLD file references as external entity a file on the local filesystem
        String file = "../example-textsymbolizer-externalentities.xml";
       
        Parser parser = new Parser(new SLDConfiguration());
       
        try {
            InputStream location = getClass().getResourceAsStream(file);
            parser.parse(location);
            fail("parsing should fail with a FileNotFoundException because the parser try to access a file that doesn't exist");
        } catch (FileNotFoundException e) {
        }
       
        // set an entity resolver to prevent access to the local file system
        parser.setEntityResolver(new EntityResolver() {
            @Override
            public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
                return new InputSource();
            }     
        });
       
        try {
            InputStream location = getClass().getResourceAsStream(file);
            parser.parse(location);
            fail("parsing should fail with a MalformedURLException because the EntityResolver blocked entity resolution");
        } catch (MalformedURLException e) {
        }       
    }
   
    public void testParseValidateVendorOptions() throws Exception {
        String file = "example-sld-vendor-option.xml";
        StyledLayerDescriptor sld = (StyledLayerDescriptor) parse(file);
       
        // basic drill down
        assertEquals(1, sld.getStyledLayers().length);
        NamedLayer layer = (NamedLayer) sld.getStyledLayers()[0];
        assertEquals(1, layer.getStyles().length);
        Style style = layer.getStyles()[0];
        assertEquals(1, style.featureTypeStyles().size());
        FeatureTypeStyle fts = style.featureTypeStyles().get(0);
        assertEquals(1, fts.rules().size());
        Rule rule = fts.rules().get(0);
        assertEquals(4,  rule.symbolizers().size());
       
        // every symbolizer has the vendor option
        PolygonSymbolizer poly = (PolygonSymbolizer) rule.symbolizers().get(0);
        assertEquals(1, poly.getOptions().size());
        assertEquals("true", poly.getOptions().get("labelObstacle"));
       
        LineSymbolizer line = (LineSymbolizer) rule.symbolizers().get(1);
        assertEquals(1, line.getOptions().size());
        assertEquals("true", line.getOptions().get("labelObstacle"));
       
        PointSymbolizer point = (PointSymbolizer) rule.symbolizers().get(2);
        assertEquals(1, point.getOptions().size());
        assertEquals("true", point.getOptions().get("labelObstacle"));
       
        TextSymbolizer text = (TextSymbolizer) rule.symbolizers().get(3);
        assertEquals(1, text.getOptions().size());
        assertEquals("100", text.getOptions().get("repeat"));
       
        // check it passes validation
        List errors = validate(file);
        assertEquals(0, errors.size());
    }
}
TOP

Related Classes of org.geotools.sld.v1_1.SLDExampleTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.