package org.geoserver.gss.xml; import static org.custommonkey.xmlunit.XMLAssert.*; import java.util.Collections; import javax.xml.namespace.QName; import net.opengis.wfs.DeleteElementType; import net.opengis.wfs.InsertElementType; import net.opengis.wfs.PropertyType; import net.opengis.wfs.TransactionType; import net.opengis.wfs.UpdateElementType; import net.opengis.wfs.WfsFactory; import org.geoserver.gss.GetDiffResponseType; import org.geoserver.gss.PostDiffType; import org.geotools.data.DataUtilities; import org.geotools.factory.CommonFactoryFinder; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.FilterFactory; import org.w3c.dom.Document; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.io.WKTReader; public class GetDiffResponseTypeBindingTest extends GSSXMLTestSupport { public void testEncode() throws Exception { // build the transaction QName restricted = new QName(SF_NAMESPACE, "restricted"); WfsFactory wfs = WfsFactory.eINSTANCE; FilterFactory ff = CommonFactoryFinder.getFilterFactory(null); InsertElementType insert = wfs.createInsertElementType(); SimpleFeatureType ft = DataUtilities.createType("restricted", "cat:java.lang.Long,the_geom:Polygon"); Geometry polygon = new WKTReader().read("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); SimpleFeature f = SimpleFeatureBuilder.build(ft, new Object[] { 123, polygon }, "restricted.105"); insert.getFeature().add(f); DeleteElementType delete = wfs.createDeleteElementType(); delete.setTypeName(restricted); delete.setFilter(ff.id(Collections.singleton(ff.featureId("restricted.23")))); UpdateElementType update = wfs.createUpdateElementType(); update.setTypeName(restricted); update.setFilter(ff.id(Collections.singleton(ff.featureId("restricted.21")))); PropertyType property = wfs.createPropertyType(); property.setName(new QName(SF_NAMESPACE, "cat")); property.setValue(-48); update.getProperty().add(property); TransactionType transaction = wfs.createTransactionType(); transaction.getInsert().add(insert); transaction.getUpdate().add(update); transaction.getDelete().add(delete); GetDiffResponseType response = new GetDiffResponseType(); response.setFromVersion(15); response.setToVersion(47); response.setTypeName(restricted); response.setTransaction(transaction); Document doc = encode(response, GSS.GetDiffResponse); // print(doc); assertXpathEvaluatesTo("15", "/gss:GetDiffResponse/@fromVersion", doc); assertXpathEvaluatesTo("47", "/gss:GetDiffResponse/@toVersion", doc); assertXpathEvaluatesTo("sf:restricted", "/gss:GetDiffResponse/@typeName", doc); // we trust the encoding to be working, just check the transaction is actually being encoded assertXpathExists("/gss:GetDiffResponse/gss:Changes", doc); assertXpathExists("/gss:GetDiffResponse/gss:Changes/wfs:Insert", doc); assertXpathExists("/gss:GetDiffResponse/gss:Changes/wfs:Update", doc); assertXpathExists("/gss:GetDiffResponse/gss:Changes/wfs:Delete", doc); } public void testParse() throws Exception { document = dom("GetDiffResponse.xml"); GetDiffResponseType gdr = (GetDiffResponseType) parse(GSS.GetDiffResponseType); assertEquals(15, gdr.getFromVersion()); assertEquals(47, gdr.getToVersion()); assertEquals(SF_NAMESPACE, gdr.getTypeName().getNamespaceURI()); assertEquals("restricted", gdr.getTypeName().getLocalPart()); assertNotNull(gdr.getTransaction()); assertEquals(1, gdr.getTransaction().getDelete().size()); assertEquals(1, gdr.getTransaction().getUpdate().size()); assertEquals(1, gdr.getTransaction().getInsert().size()); } }