package org.geoserver.wcs.xml; import java.io.StringReader; import java.util.Arrays; import junit.framework.TestCase; import net.opengis.wcs11.AxisSubsetType; import net.opengis.wcs11.FieldSubsetType; import net.opengis.wcs11.GetCoverageType; import net.opengis.wcs11.GridCrsType; import org.geoserver.wcs.xml.v1_1_1.WCSConfiguration; import org.geoserver.wcs.xml.v1_1_1.WcsXmlReader; import org.vfny.geoserver.wcs.WcsException; public class GetCoverageXmlParserTest extends TestCase { private WCSConfiguration configuration; private WcsXmlReader reader; @Override protected void setUp() throws Exception { super.setUp(); configuration = new WCSConfiguration(); reader = new WcsXmlReader("GetCoverage", "1.1.1", configuration); } public void testInvalid() throws Exception { String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + // "<wcs:GetCoverage service=\"WCS\" " + // "xmlns:ows=\"http://www.opengis.net/ows/1.1\"\r\n" + // " xmlns:wcs=\"http://www.opengis.net/wcs/1.1.1\"\r\n" + // " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n" + // " xsi:schemaLocation=\"http://www.opengis.net/wcs/1.1.1 " + // " schemas/wcs/1.1.1/wcsAll.xsd\"\r\n" + // " version=\"1.1.1\" >\r\n" + // " <Identifier>wcs:BlueMarble</Identifier>\r\n" + // " <ows:BoundingBox crs=\"urn:ogc:def:crs:EPSG:6.6:4326\">\r\n" + // " <ows:LowerCorner>-90 -180</ows:LowerCorner>\r\n" + // " <ows:UpperCorner>90 180</ows:UpperCorner>\r\n" + // " </ows:BoundingBox>\r\n" + // " <wcs:Output format=\"image/tiff\"/>\r\n" + // "</wcs:GetCoverage>"; try { reader.read(null, new StringReader(request), null); fail("This request is not valid!!!"); } catch(WcsException e) { // ok, we do expect a validation exception in fact } } public void testBasic() throws Exception { String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + // "<wcs:GetCoverage service=\"WCS\" " + // "xmlns:ows=\"http://www.opengis.net/ows/1.1\"\r\n" + // " xmlns:wcs=\"http://www.opengis.net/wcs/1.1.1\"\r\n" + // " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n" + // " xsi:schemaLocation=\"http://www.opengis.net/wcs/1.1.1 " + // " schemas/wcs/1.1.1/wcsAll.xsd\"\r\n" + // " version=\"1.1.1\" >\r\n" + // " <ows:Identifier>wcs:BlueMarble</ows:Identifier>\r\n" + // " <wcs:DomainSubset>\r\n" + // " <ows:BoundingBox crs=\"urn:ogc:def:crs:EPSG:6.6:4326\">\r\n" + // " <ows:LowerCorner>-90 -180</ows:LowerCorner>\r\n" + // " <ows:UpperCorner>90 180</ows:UpperCorner>\r\n" + // " </ows:BoundingBox>\r\n" + // " </wcs:DomainSubset>\r\n" + // " <wcs:Output format=\"image/tiff\"/>\r\n" + // "</wcs:GetCoverage>"; // System.out.println(request); // smoke test, we only try out a very basic request GetCoverageType gc = (GetCoverageType) reader.read(null, new StringReader( request), null); assertEquals("WCS", gc.getService()); assertEquals("1.1.1", gc.getVersion()); assertEquals("wcs:BlueMarble", gc.getIdentifier().getValue()); assertEquals("urn:ogc:def:crs:EPSG:6.6:4326", gc.getDomainSubset().getBoundingBox().getCrs()); assertEquals(Arrays.asList(-90.0, -180.0), gc.getDomainSubset().getBoundingBox().getLowerCorner()); assertEquals(Arrays.asList(90.0, 180.0), gc.getDomainSubset().getBoundingBox().getUpperCorner()); assertEquals("image/tiff", gc.getOutput().getFormat()); assertNull(gc.getOutput().getGridCRS()); } public void testRangeSubsetKeys() throws Exception { String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + // "<wcs:GetCoverage service=\"WCS\" " +// "xmlns:ows=\"http://www.opengis.net/ows/1.1\"\r\n" + // " xmlns:wcs=\"http://www.opengis.net/wcs/1.1.1\"\r\n" + // " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n" + // " xsi:schemaLocation=\"http://www.opengis.net/wcs/1.1.1 " +// "schemas/wcs/1.1.1/wcsAll.xsd\"\r\n" + // " version=\"1.1.1\" >\r\n" + // " <ows:Identifier>wcs:BlueMarble</ows:Identifier>\r\n" + // " <wcs:DomainSubset>\r\n" + // " <ows:BoundingBox crs=\"urn:ogc:def:crs:EPSG:6.6:4326\">\r\n" + // " <ows:LowerCorner>-90 -180</ows:LowerCorner>\r\n" + // " <ows:UpperCorner>90 180</ows:UpperCorner>\r\n" + // " </ows:BoundingBox>\r\n" + // " </wcs:DomainSubset>\r\n" + // " <wcs:RangeSubset>\r\n" + // " <wcs:FieldSubset>\r\n" + // " <ows:Identifier>BlueMarble</ows:Identifier>\r\n" + // " <wcs:InterpolationType>bicubic</wcs:InterpolationType>\r\n" + // " <wcs:AxisSubset>\r\n" + // " <wcs:Identifier>Bands</wcs:Identifier>\r\n" + // " <wcs:Key>Red_band</wcs:Key>\r\n" + // " </wcs:AxisSubset>\r\n" + // " </wcs:FieldSubset>\r\n" + // " </wcs:RangeSubset>\r\n" + // " <wcs:Output format=\"image/tiff\"/>\r\n" + // "</wcs:GetCoverage>"; GetCoverageType gc = (GetCoverageType) reader.read(null, new StringReader( request), null); assertEquals(1, gc.getRangeSubset().getFieldSubset().size()); FieldSubsetType field = (FieldSubsetType) gc.getRangeSubset().getFieldSubset().get(0); assertEquals("BlueMarble", field.getIdentifier().getValue()); assertEquals("bicubic", field.getInterpolationType()); assertEquals(1, field.getAxisSubset().size()); AxisSubsetType axis = (AxisSubsetType) field.getAxisSubset().get(0); assertEquals("Bands", axis.getIdentifier()); assertEquals(1, axis.getKey().size()); String key = (String) axis.getKey().get(0); assertEquals("Red_band", key); } public void testGridCRS() throws Exception { String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + // "<wcs:GetCoverage service=\"WCS\" " + // "xmlns:ows=\"http://www.opengis.net/ows/1.1\"\r\n" + // " xmlns:wcs=\"http://www.opengis.net/wcs/1.1.1\"\r\n" + // " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n" + // " xsi:schemaLocation=\"http://www.opengis.net/wcs/1.1.1 " + // "schemas/wcs/1.1.1/wcsAll.xsd\"\r\n" + // " version=\"1.1.1\" >\r\n" + // " <ows:Identifier>wcs:BlueMarble</ows:Identifier>\r\n" + // " <wcs:DomainSubset>\r\n" + // " <ows:BoundingBox crs=\"urn:ogc:def:crs:EPSG:6.6:4326\">\r\n" + // " <ows:LowerCorner>-90 -180</ows:LowerCorner>\r\n" + // " <ows:UpperCorner>90 180</ows:UpperCorner>\r\n" + // " </ows:BoundingBox>\r\n" + // " </wcs:DomainSubset>\r\n" + // " <wcs:Output format=\"image/tiff\">\r\n" + // " <wcs:GridCRS>\r\n" + // " <wcs:GridBaseCRS>urn:ogc:def:crs:EPSG:6.6:4326</wcs:GridBaseCRS>\r\n" + // " <wcs:GridType>urn:ogc:def:method:WCS:1.1:2dSimpleGrid</wcs:GridType>\r\n" + // " <wcs:GridOrigin>10 20</wcs:GridOrigin>\r\n" + // " <wcs:GridOffsets>1 2</wcs:GridOffsets>\r\n" + // " <wcs:GridCS>urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS</wcs:GridCS>\r\n" + // " </wcs:GridCRS>\r\n" + // " </wcs:Output>\r\n" + // "</wcs:GetCoverage>"; GetCoverageType gc = (GetCoverageType) reader.read(null, new StringReader( request), null); final GridCrsType gridCRS = gc.getOutput().getGridCRS(); assertEquals("urn:ogc:def:crs:EPSG:6.6:4326", gridCRS.getGridBaseCRS()); assertEquals("urn:ogc:def:method:WCS:1.1:2dSimpleGrid", gridCRS.getGridType()); assertEquals("urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS", gridCRS.getGridCS()); System.out.println(gridCRS.getGridOrigin().getClass() + ": " + gridCRS.getGridOrigin()); assertTrue(Arrays.equals(new Double[] {10.0, 20.0}, (Double[]) gridCRS.getGridOrigin())); assertTrue(Arrays.equals(new Double[] {1.0, 2.0}, (Double[]) gridCRS.getGridOffsets())); } }