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()));
}
}