public void testInsertSrsName() throws Exception { String q = "wfs?request=getfeature&service=wfs&version=1.1&typeName=" + MockData.POLYGONS.getLocalPart(); Document dom = getAsDOM(q); assertEquals( 1, dom.getElementsByTagName( MockData.POLYGONS.getPrefix() + ":" + MockData.POLYGONS.getLocalPart()) .getLength()); Element polygonProperty = getFirstElementByTagName(dom, "cgf:polygonProperty"); Element posList = getFirstElementByTagName(polygonProperty, "gml:posList"); double[] c = posList(posList.getFirstChild().getNodeValue()); double[] cr = new double[c.length]; tx.transform(c, 0, cr, 0, cr.length / 2); String xml = "<wfs:Transaction service=\"WFS\" version=\"1.1.0\" " + " xmlns:wfs=\"http://www.opengis.net/wfs\" " + " xmlns:gml=\"http://www.opengis.net/gml\" " + " xmlns:cgf=\"" + MockData.CGF_URI + "\">" + "<wfs:Insert handle=\"insert-1\" srsName=\"" + TARGET_CRS_CODE + "\">" + " <cgf:Polygons>" + "<cgf:polygonProperty>" + "<gml:Polygon >" + "<gml:exterior>" + "<gml:LinearRing>" + "<gml:posList>"; for (int i = 0; i < cr.length; i++) { xml += cr[i]; if (i < cr.length - 1) { xml += " "; } } xml += "</gml:posList>" + "</gml:LinearRing>" + "</gml:exterior>" + "</gml:Polygon>" + "</cgf:polygonProperty>" + " </cgf:Polygons>" + "</wfs:Insert>" + "</wfs:Transaction>"; postAsDOM("wfs", xml); dom = getAsDOM(q); // print(dom); assertEquals( 2, dom.getElementsByTagName( MockData.POLYGONS.getPrefix() + ":" + MockData.POLYGONS.getLocalPart()) .getLength()); }
@Test public void testReproject() throws Exception { FeatureTypeInfo fti = getCatalog().getFeatureTypeByName(MockData.POLYGONS.getLocalPart()); assertEquals("EPSG:4326", fti.getSRS()); assertEquals(ProjectionPolicy.REPROJECT_TO_DECLARED, fti.getProjectionPolicy()); FeatureCollection fc = fti.getFeatureSource(null, null).getFeatures(); assertEquals(CRS.decode("EPSG:4326"), fc.getSchema().getCoordinateReferenceSystem()); FeatureIterator fi = fc.features(); Feature f = fi.next(); // test that geometry was actually reprojected Geometry g = (Geometry) f.getDefaultGeometryProperty().getValue(); assertFalse( g.equalsExact( WKT.read( "POLYGON((500225 500025,500225 500075,500275 500050,500275 500025,500225 500025))"))); fi.close(); assertEquals(CRS.decode("EPSG:4326"), f.getType().getCoordinateReferenceSystem()); }
public void testUpdate() throws Exception { String q = "wfs?request=getfeature&service=wfs&version=1.1&typeName=" + MockData.POLYGONS.getLocalPart(); Document dom = getAsDOM(q); // print(dom); Element polygonProperty = getFirstElementByTagName(dom, "cgf:polygonProperty"); Element posList = getFirstElementByTagName(polygonProperty, "gml:posList"); double[] c = posList(posList.getFirstChild().getNodeValue()); double[] cr = new double[c.length]; tx.transform(c, 0, cr, 0, cr.length / 2); // perform an update String xml = "<wfs:Transaction service=\"WFS\" version=\"1.1.0\" " + "xmlns:cgf=\"http://www.opengis.net/cite/geometry\" " + "xmlns:ogc=\"http://www.opengis.net/ogc\" " + "xmlns:wfs=\"http://www.opengis.net/wfs\" " + "xmlns:gml=\"http://www.opengis.net/gml\"> " + "<wfs:Update typeName=\"cgf:Polygons\" > " + "<wfs:Property>" + "<wfs:Name>polygonProperty</wfs:Name>" + "<wfs:Value>" + "<gml:Polygon srsName=\"" + TARGET_CRS_CODE + "\">" + "<gml:exterior>" + "<gml:LinearRing>" + "<gml:posList>"; for (int i = 0; i < cr.length; i++) { xml += cr[i]; if (i < cr.length - 1) { xml += " "; } } xml += "</gml:posList>" + "</gml:LinearRing>" + "</gml:exterior>" + "</gml:Polygon>" + "</wfs:Value>" + "</wfs:Property>" + "<ogc:Filter>" + "<ogc:PropertyIsEqualTo>" + "<ogc:PropertyName>id</ogc:PropertyName>" + "<ogc:Literal>t0002</ogc:Literal>" + "</ogc:PropertyIsEqualTo>" + "</ogc:Filter>" + "</wfs:Update>" + "</wfs:Transaction>"; dom = postAsDOM("wfs", xml); assertEquals("wfs:TransactionResponse", dom.getDocumentElement().getNodeName()); Element totalUpdated = getFirstElementByTagName(dom, "wfs:totalUpdated"); assertEquals("1", totalUpdated.getFirstChild().getNodeValue()); dom = getAsDOM(q); polygonProperty = getFirstElementByTagName(dom, "cgf:polygonProperty"); posList = getFirstElementByTagName(polygonProperty, "gml:posList"); double[] c1 = posList(posList.getFirstChild().getNodeValue()); assertEquals(c.length, c1.length); for (int i = 0; i < c.length; i++) { int x = (int) (c[i] + 0.5); int y = (int) (c1[i] + 0.5); assertEquals(x, y); } }