/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wfs; import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import org.geoserver.config.util.XStreamPersister; import org.geoserver.config.util.XStreamPersisterFactory; import org.geotools.data.wfs.internal.v2_0.storedquery.ParameterMappingDefaultValue; import org.geotools.data.wfs.internal.v2_0.storedquery.ParameterMappingExpressionValue; import org.geotools.data.wfs.internal.v2_0.storedquery.StoredQueryConfiguration; import org.junit.Before; import org.junit.Test; public class WFSCascadedStoredQueryConfigurationParserTest { private XStreamPersister persister; @Before public void setup() { XStreamPersisterFactory xpf = new XStreamPersisterFactory(); WFSXStreamPersisterInitializer initializer = new WFSXStreamPersisterInitializer(); xpf.addInitializer(initializer); persister = xpf.createXMLPersister(); } @Test public void testDeserialization() throws Exception { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<storedQueryConfiguration>\n" + " <storedQueryParameterMappings>\n" + " <storedQueryParameterMappingExpressionValue>\n" + " <parameterName>bbox</parameterName>\n" + " <expressionLanguage>CQL</expressionLanguage>\n" + " <expression>strConCat(numberFormat('0.00000000000', bboxMinY), strConCat(',', strConCat(numberFormat('0.00000000000', bboxMinX), strConCat(',', strConCat(numberFormat('0.00000000000', bboxMaxY), strConCat(',', strConCat(numberFormat('0.00000000000', bboxMaxX), ',EPSG:4258')))))))</expression>\n" + " </storedQueryParameterMappingExpressionValue>\n" + " <storedQueryParameterMappingDefaultValue>\n" + " <parameterName>timestep</parameterName>\n" + " <defaultValue>720</defaultValue>\n" + " </storedQueryParameterMappingDefaultValue>\n" + " </storedQueryParameterMappings>\n" + "</storedQueryConfiguration>"; ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes("UTF-8")); StoredQueryConfiguration configuration = persister.load(bais, StoredQueryConfiguration.class); assertNotNull(configuration); assertEquals(2, configuration.getStoredQueryParameterMappings().size()); assertEquals(ParameterMappingExpressionValue.class, configuration.getStoredQueryParameterMappings().get(0).getClass()); assertEquals(ParameterMappingDefaultValue.class, configuration.getStoredQueryParameterMappings().get(1).getClass()); ParameterMappingExpressionValue map1 = (ParameterMappingExpressionValue)configuration.getStoredQueryParameterMappings().get(0); assertEquals("bbox", map1.getParameterName()); assertEquals("CQL", map1.getExpressionLanguage()); assertEquals("strConCat(numberFormat('0.00000000000', bboxMinY), strConCat(',', strConCat(numberFormat('0.00000000000', bboxMinX), strConCat(',', strConCat(numberFormat('0.00000000000', bboxMaxY), strConCat(',', strConCat(numberFormat('0.00000000000', bboxMaxX), ',EPSG:4258')))))))", map1.getExpression()); ParameterMappingDefaultValue map2 = (ParameterMappingDefaultValue)configuration.getStoredQueryParameterMappings().get(1); assertEquals("timestep", map2.getParameterName()); assertEquals("720", map2.getDefaultValue()); } @Test public void testSerialization() throws Exception { StoredQueryConfiguration mockConfiguration = new StoredQueryConfiguration(); ParameterMappingExpressionValue param1 = new ParameterMappingExpressionValue(); param1.setParameterName("bbox"); param1.setExpressionLanguage("CQL"); param1.setExpression("strConCat(" + "numberFormat('0.00000000000', bboxMinY), strConCat(" + "',', strConCat(" + "numberFormat('0.00000000000', bboxMinX), strConCat(" + "',', strConCat(" + "numberFormat('0.00000000000', bboxMaxY), strConCat(" + "',', strConCat(" + "numberFormat('0.00000000000', bboxMaxX), ',EPSG:4258')))))))"); mockConfiguration.getStoredQueryParameterMappings().add(param1); ParameterMappingDefaultValue param2 = new ParameterMappingDefaultValue(); param2.setParameterName("timestep"); param2.setDefaultValue("720"); mockConfiguration.getStoredQueryParameterMappings().add(param2); ByteArrayOutputStream baos = new ByteArrayOutputStream(); persister.save(mockConfiguration, baos); baos.flush(); String xml = new String(baos.toByteArray(), "UTF-8"); System.err.println(xml); assertTrue(xml.contains("numberFormat")); } }