/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2008 - 2009, Geomatys * * 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; either * version 2.1 of the License, or (at your option) any later version. * * 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.geotoolkit.style.sld; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.List; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import junit.framework.TestCase; import org.geotoolkit.factory.FactoryFinder; import org.geotoolkit.factory.Hints; import org.geotoolkit.sld.xml.v110.StyledLayerDescriptor; import org.geotoolkit.sld.DefaultSLDFactory; import org.geotoolkit.sld.MutableSLDFactory; import org.geotoolkit.sld.MutableStyledLayerDescriptor; import org.geotoolkit.style.MutableStyleFactory; import org.geotoolkit.sld.xml.GTtoSLD110Transformer; import org.geotoolkit.sld.xml.JAXBSLDUtilities; import org.geotoolkit.sld.xml.SLD110toGTTransformer; import org.apache.sis.xml.MarshallerPool; import org.junit.Test; import org.opengis.filter.FilterFactory2; import org.opengis.util.FactoryException; import org.opengis.sld.Extent; import org.opengis.sld.FeatureTypeConstraint; import org.opengis.sld.LayerFeatureConstraints; import org.opengis.sld.NamedLayer; import org.opengis.sld.NamedStyle; import org.opengis.sld.RemoteOWS; import org.opengis.sld.UserLayer; /** * Test class for sld jaxb marshelling and unmarshelling. * * @author Johann Sorel (Geomatys) * @module */ public class SLD110Test extends TestCase{ private static final FilterFactory2 FILTER_FACTORY; private static final MutableStyleFactory STYLE_FACTORY; private static final MutableSLDFactory SLD_FACTORY; static{ final Hints hints = new Hints(); hints.put(Hints.STYLE_FACTORY, MutableStyleFactory.class); hints.put(Hints.FILTER_FACTORY, FilterFactory2.class); STYLE_FACTORY = (MutableStyleFactory)FactoryFinder.getStyleFactory(hints); FILTER_FACTORY = (FilterFactory2) FactoryFinder.getFilterFactory(hints); SLD_FACTORY = new DefaultSLDFactory(); } private static MarshallerPool POOL; private static SLD110toGTTransformer TRANSFORMER_GT = null; private static GTtoSLD110Transformer TRANSFORMER_SLD = null; //FILES ------------------------------------- private static File FILE_SLD = null; private static File TEST_FILE_SLD = null; static { POOL = JAXBSLDUtilities.getMarshallerPoolSLD110(); TRANSFORMER_GT = new SLD110toGTTransformer(FILTER_FACTORY, STYLE_FACTORY, SLD_FACTORY); assertNotNull(TRANSFORMER_GT); TRANSFORMER_SLD = new GTtoSLD110Transformer(); assertNotNull(TRANSFORMER_SLD); try { FILE_SLD = new File( SLD110Test.class.getResource("/org/geotoolkit/sample/SLD_v110.xml").toURI() ); } catch (URISyntaxException ex) { ex.printStackTrace(); } assertNotNull(FILE_SLD); try{ TEST_FILE_SLD = File.createTempFile("test_sld_v110",".xml"); }catch(IOException ex){ ex.printStackTrace(); } //switch to false to avoid temp files to be deleted if(true){ TEST_FILE_SLD.deleteOnExit(); } } //////////////////////////////////////////////////////////////////////////// // JAXB TEST MARSHELLING AND UNMARSHELLING FOR STYLE ORDERING ////////////// //////////////////////////////////////////////////////////////////////////// @Test public void testSLD() throws JAXBException, FactoryException{ final Unmarshaller UNMARSHALLER = POOL.acquireUnmarshaller(); final Marshaller MARSHALLER = POOL.acquireMarshaller(); //Read test------------------------------------------------------------- //---------------------------------------------------------------------- Object obj = UNMARSHALLER.unmarshal(FILE_SLD); assertNotNull(obj); StyledLayerDescriptor jax = (StyledLayerDescriptor) obj; MutableStyledLayerDescriptor sld = TRANSFORMER_GT.visit(jax); assertNotNull(sld); //Details assertEquals(sld.getName(), "SLD : name"); assertEquals(sld.getDescription().getTitle().toString(), "SLD : title"); assertEquals(sld.getDescription().getAbstract().toString(), "SLD : abstract"); //libraries assertEquals(sld.libraries().size(), 1); assertEquals(sld.libraries().get(0).getOnlineResource().getLinkage().toString(), "http://geomayts.fr/anSLDFile.xml"); //layers assertEquals(sld.layers().size(), 2); //Named Layer----------------------------------------------------------- NamedLayer nl = (NamedLayer) sld.layers().get(0); assertEquals(nl.getName(), "Named layer : name"); assertEquals(nl.getDescription().getTitle().toString(), "Named layer : title"); assertEquals(nl.getDescription().getAbstract().toString(), "Named layer : abstract"); List<? extends FeatureTypeConstraint> cons = nl.getConstraints().constraints(); assertEquals(cons.size(), 1); assertNotNull( cons.get(0).getFilter() ); assertTrue( cons.get(0).getFeatureTypeName().toString().endsWith("FeatureName")); assertEquals(cons.get(0).getExtent().size(), 3); Extent ext = cons.get(0).getExtent().get(0); assertEquals(ext.getName(), "Ext : Name 1"); assertEquals(ext.getValue(), "Ext : Value 1"); ext = cons.get(0).getExtent().get(1); assertEquals(ext.getName(), "Ext : Name 2"); assertEquals(ext.getValue(), "Ext : Value 2"); ext = cons.get(0).getExtent().get(2); assertEquals(ext.getName(), "Ext : Name 3"); assertEquals(ext.getValue(), "Ext : Value 3"); //Named Style----------------------------------------------------------- assertEquals(nl.styles().size(), 1); NamedStyle ns = (NamedStyle) nl.styles().get(0); assertEquals(ns.getName(), "Named style : name"); assertEquals(ns.getDescription().getTitle().toString(), "Named style : title"); assertEquals(ns.getDescription().getAbstract().toString(), "Named style : abstract"); //User Layer------------------------------------------------------------ UserLayer ul = (UserLayer)sld.layers().get(1); assertEquals(ul.getName(), "User layer : name"); assertEquals(ul.getDescription().getTitle().toString(), "User layer : title"); assertEquals(ul.getDescription().getAbstract().toString(), "User layer : abstract"); RemoteOWS source = (RemoteOWS) ul.getSource(); assertEquals(source.getService(), "WFS"); assertEquals(source.getOnlineResource().getLinkage().toString(), "http://some.site.com/WFS?"); cons = ((LayerFeatureConstraints)ul.getConstraints()).constraints(); assertEquals(cons.size(), 1); assertNotNull( cons.get(0).getFilter() ); assertTrue( cons.get(0).getFeatureTypeName().toString().endsWith("FeatureName")); assertEquals(cons.get(0).getExtent().size(), 2); ext = cons.get(0).getExtent().get(0); assertEquals(ext.getName(), "Ext : Name 1"); assertEquals(ext.getValue(), "Ext : Value 1"); ext = cons.get(0).getExtent().get(1); assertEquals(ext.getName(), "Ext : Name 2"); assertEquals(ext.getValue(), "Ext : Value 2"); assertEquals(ul.styles().size(), 1); //we dont test the user style, this is done in the SE test //Write test------------------------------------------------------------ //---------------------------------------------------------------------- StyledLayerDescriptor pvt = TRANSFORMER_SLD.visit(sld, null); assertNotNull(pvt); assertEquals(pvt.getName(), "SLD : name"); assertEquals(String.valueOf(pvt.getDescription().getTitle()), "SLD : title"); assertEquals(String.valueOf(pvt.getDescription().getAbstract()), "SLD : abstract"); //layers assertEquals(pvt.getNamedLayerOrUserLayer().size(), 2); //Named Layer----------------------------------------------------------- org.geotoolkit.sld.xml.v110.NamedLayer nlt = (org.geotoolkit.sld.xml.v110.NamedLayer) pvt.getNamedLayerOrUserLayer().get(0); assertEquals(nlt.getName(), "Named layer : name"); assertEquals(String.valueOf(nlt.getDescription().getTitle()), "Named layer : title"); assertEquals(String.valueOf(nlt.getDescription().getAbstract()), "Named layer : abstract"); List<org.geotoolkit.sld.xml.v110.FeatureTypeConstraint> constr = nlt.getLayerFeatureConstraints().getFeatureTypeConstraint(); assertEquals(constr.size(), 1); assertNotNull(constr.get(0).getFilter()); assertTrue( cons.get(0).getFeatureTypeName().toString().endsWith("FeatureName")); assertEquals(constr.get(0).getExtent().size(), 3); org.geotoolkit.sld.xml.v110.Extent extx = constr.get(0).getExtent().get(0); assertEquals(extx.getName(), "Ext : Name 1"); assertEquals(extx.getValue(), "Ext : Value 1"); extx = constr.get(0).getExtent().get(1); assertEquals(extx.getName(), "Ext : Name 2"); assertEquals(extx.getValue(), "Ext : Value 2"); extx = constr.get(0).getExtent().get(2); assertEquals(extx.getName(), "Ext : Name 3"); assertEquals(extx.getValue(), "Ext : Value 3"); //Named Style----------------------------------------------------------- assertEquals(nlt.getNamedStyleOrUserStyle().size(), 1); org.geotoolkit.sld.xml.v110.NamedStyle nst = (org.geotoolkit.sld.xml.v110.NamedStyle) nlt.getNamedStyleOrUserStyle().get(0); assertEquals(nst.getName(), "Named style : name"); assertEquals(String.valueOf(nst.getDescription().getTitle()), "Named style : title"); assertEquals(String.valueOf(nst.getDescription().getAbstract()), "Named style : abstract"); //User Layer------------------------------------------------------------ org.geotoolkit.sld.xml.v110.UserLayer ulx = (org.geotoolkit.sld.xml.v110.UserLayer)pvt.getNamedLayerOrUserLayer().get(1); assertEquals(ulx.getName(), "User layer : name"); assertEquals(String.valueOf(ulx.getDescription().getTitle()), "User layer : title"); assertEquals(String.valueOf(ulx.getDescription().getAbstract()), "User layer : abstract"); org.geotoolkit.sld.xml.v110.RemoteOWS sourcex = (org.geotoolkit.sld.xml.v110.RemoteOWS) ulx.getRemoteOWS(); assertEquals(sourcex.getService(), "WFS"); assertEquals(sourcex.getOnlineResource().getHref(), "http://some.site.com/WFS?"); constr = ulx.getLayerFeatureConstraints().getFeatureTypeConstraint(); assertEquals(constr.size(), 1); assertNotNull(cons.get(0).getFilter()); assertEquals(cons.get(0).getFeatureTypeName().tip().toString(),"FeatureName"); assertEquals(cons.get(0).getExtent().size(), 2); ext = cons.get(0).getExtent().get(0); assertEquals(ext.getName(), "Ext : Name 1"); assertEquals(ext.getValue(), "Ext : Value 1"); ext = cons.get(0).getExtent().get(1); assertEquals(ext.getName(), "Ext : Name 2"); assertEquals(ext.getValue(), "Ext : Value 2"); assertEquals(ulx.getUserStyle().size(), 1); MARSHALLER.marshal(pvt, TEST_FILE_SLD); POOL.recycle(MARSHALLER); POOL.recycle(UNMARSHALLER); } }