/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* 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.assertEquals;
import static org.junit.Assert.assertTrue;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.data.test.SystemTestData;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
public class RetypingTransactionTest extends WFSTestSupport {
@Override
protected void setUpInternal(SystemTestData dataDirectory) throws Exception {
Catalog catalog = getCatalog();
FeatureTypeInfo featureType1 = catalog.getFeatureTypeByName(SystemTestData.POLYGONS.getLocalPart());
featureType1.setName( "MyPolygons");
getCatalog().save(featureType1);
FeatureTypeInfo featureType2 = catalog.getFeatureTypeByName(SystemTestData.LINES.getLocalPart());
featureType2.setName( "MyLines");
getCatalog().save(featureType2);
FeatureTypeInfo featureType3 = catalog.getFeatureTypeByName(SystemTestData.POINTS.getLocalPart());
featureType3.setName( "MyPoints");
getCatalog().save(featureType3);
}
@Before
public void revert() throws Exception {
revertLayer(SystemTestData.POLYGONS);
revertLayer(SystemTestData.LINES);
revertLayer(SystemTestData.POINTS);
}
@Test
public void testInsert() throws Exception {
// 1. do a getFeature
String getFeature = "<wfs:GetFeature " + "service=\"WFS\" "
+ "version=\"1.0.0\" "
+ "xmlns:cgf=\"http://www.opengis.net/cite/geometry\" "
+ "xmlns:ogc=\"http://www.opengis.net/ogc\" "
+ "xmlns:wfs=\"http://www.opengis.net/wfs\" " + "> "
+ "<wfs:Query typeName=\"cgf:MyLines\"> "
+ "<ogc:PropertyName>cite:id</ogc:PropertyName> "
+ "</wfs:Query> " + "</wfs:GetFeature>";
Document dom = postAsDOM("wfs", getFeature);
assertEquals(1, dom.getElementsByTagName("gml:featureMember")
.getLength());
// perform an insert
String insert = "<wfs:Transaction service=\"WFS\" version=\"1.0.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:Insert > "
+ "<cgf:MyLines>"
+ "<cgf:lineStringProperty>"
+ "<gml:LineString>"
+ "<gml:coordinates decimal=\".\" cs=\",\" ts=\" \">"
+ "494475.71056415,5433016.8189323 494982.70115662,5435041.95096618"
+ "</gml:coordinates>" + "</gml:LineString>"
+ "</cgf:lineStringProperty>" + "<cgf:id>t0002</cgf:id>"
+ "</cgf:MyLines>" + "</wfs:Insert>" + "</wfs:Transaction>";
dom = postAsDOM("wfs", insert);
assertTrue(dom.getElementsByTagName("wfs:SUCCESS").getLength() != 0);
assertTrue(dom.getElementsByTagName("wfs:InsertResult").getLength() != 0);
// do another get feature
dom = postAsDOM("wfs", getFeature);
assertEquals(2, dom.getElementsByTagName("gml:featureMember")
.getLength());
}
@Test
public void testUpdate() throws Exception {
// 1. do a getFeature
String getFeature = "<wfs:GetFeature " + "service=\"WFS\" "
+ "version=\"1.0.0\" "
+ "xmlns:cgf=\"http://www.opengis.net/cite/geometry\" "
+ "xmlns:ogc=\"http://www.opengis.net/ogc\" "
+ "xmlns:wfs=\"http://www.opengis.net/wfs\" " + "> "
+ "<wfs:Query typeName=\"cgf:MyPolygons\"> "
+ "<ogc:PropertyName>cite:id</ogc:PropertyName> "
+ "</wfs:Query> " + "</wfs:GetFeature>";
Document dom = postAsDOM("wfs", getFeature);
assertEquals(1, dom.getElementsByTagName("gml:featureMember")
.getLength());
assertEquals("t0002", dom.getElementsByTagName("cgf:id").item(0)
.getFirstChild().getNodeValue());
// perform an update
String insert = "<wfs:Transaction service=\"WFS\" version=\"1.0.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:MyPolygons\" > " + "<wfs:Property>"
+ "<wfs:Name>id</wfs:Name>" + "<wfs:Value>t0003</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", insert);
// do another get feature
dom = postAsDOM("wfs", getFeature);
assertEquals("t0003", dom.getElementsByTagName("cgf:id").item(0)
.getFirstChild().getNodeValue());
}
@Test
public void testDelete() throws Exception {
// 1. do a getFeature
String getFeature = "<wfs:GetFeature " + "service=\"WFS\" "
+ "version=\"1.0.0\" "
+ "xmlns:cgf=\"http://www.opengis.net/cite/geometry\" "
+ "xmlns:ogc=\"http://www.opengis.net/ogc\" "
+ "xmlns:wfs=\"http://www.opengis.net/wfs\" " + "> "
+ "<wfs:Query typeName=\"cgf:MyPoints\"> "
+ "<ogc:PropertyName>cite:id</ogc:PropertyName> "
+ "</wfs:Query> " + "</wfs:GetFeature>";
Document dom = postAsDOM("wfs", getFeature);
assertEquals(1, dom.getElementsByTagName("gml:featureMember")
.getLength());
// perform a delete
String delete = "<wfs:Transaction service=\"WFS\" version=\"1.0.0\" "
+ "xmlns:cgf=\"http://www.opengis.net/cite/geometry\" "
+ "xmlns:ogc=\"http://www.opengis.net/ogc\" "
+ "xmlns:wfs=\"http://www.opengis.net/wfs\"> "
+ "<wfs:Delete typeName=\"cgf:MyPoints\"> " + "<ogc:Filter> "
+ "<ogc:PropertyIsEqualTo> "
+ "<ogc:PropertyName>cgf:id</ogc:PropertyName> "
+ "<ogc:Literal>t0000</ogc:Literal> "
+ "</ogc:PropertyIsEqualTo> " + "</ogc:Filter> "
+ "</wfs:Delete> " + "</wfs:Transaction>";
dom = postAsDOM("wfs", delete);
assertEquals("WFS_TransactionResponse", dom.getDocumentElement()
.getLocalName());
assertEquals(1, dom.getElementsByTagName("wfs:SUCCESS").getLength());
// do another get feature
dom = postAsDOM("wfs", getFeature);
assertEquals(0, dom.getElementsByTagName("gml:featureMember")
.getLength());
}
}