/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.xml;
import junit.framework.TestCase;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.filter.expression.PropertyAccessor;
public class XPathPropertyAcessorTest extends TestCase {
SimpleFeatureType type;
SimpleFeature target;
protected void setUp() throws Exception {
SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
typeBuilder.setName("test");
typeBuilder.setNamespaceURI("http://www.geotools.org/test");
typeBuilder.add("name", String.class);
typeBuilder.add("description", String.class);
typeBuilder.add("geometry", Geometry.class);
type = (SimpleFeatureType) typeBuilder.buildFeatureType();
SimpleFeatureBuilder builder = new SimpleFeatureBuilder(type);
builder.add("theName");
builder.add("theDescription");
builder.add(new GeometryFactory().createPoint(new Coordinate(0, 0)));
target = (SimpleFeature) builder.buildFeature("fid");
}
public void testSimpleXpath() {
PropertyAccessor accessor = accessor("name");
Object o = accessor.get(target, "name", null);
assertNotNull(o);
assertEquals("theName", o);
accessor = accessor("description");
o = accessor.get(target, "description", null);
assertNotNull(o);
assertEquals("theDescription", o);
accessor = accessor("geometry");
o = accessor.get(target, "geometry", null);
assertNotNull(o);
assertTrue(o instanceof Point);
accessor = accessor("foo");
o = accessor.get(target, "foo", null);
assertNull(o);
}
public void testSimpleXpathType() {
PropertyAccessor accessor = accessor("name");
Object o = accessor.get(type, "name", null);
assertNotNull(o);
assertEquals(type.getDescriptor("name"), o);
accessor = accessor("description");
o = accessor.get(type, "description", null);
assertNotNull(o);
assertEquals(type.getDescriptor("description"), o);
accessor = accessor("geometry");
o = accessor.get(type, "geometry", null);
assertNotNull(o);
assertEquals(type.getDescriptor("geometry"), o);
accessor = accessor("foo");
o = accessor.get(type, "foo", null);
assertNull(o);
}
public void testSimpleXpathWithNamespace() {
PropertyAccessor accessor = accessor("gml:name");
Object o = accessor.get(target, "gml:name", null);
assertNotNull(o);
assertEquals("theName", o);
accessor = accessor("gml:description");
o = accessor.get(target, "gml:description", null);
assertNotNull(o);
assertEquals("theDescription", o);
accessor = accessor("test:geometry");
o = accessor.get(target, "test:geometry", null);
assertNotNull(o);
assertTrue(o instanceof Point);
}
public void testSimpleXpathWithNamespaceType() {
PropertyAccessor accessor = accessor("gml:name");
Object o = accessor.get(type, "gml:name", null);
assertNotNull(o);
assertEquals(type.getDescriptor("name"), o);
accessor = accessor("gml:description");
o = accessor.get(type, "gml:description", null);
assertNotNull(o);
assertEquals(type.getDescriptor("description"), o);
accessor = accessor("test:geometry");
o = accessor.get(type, "test:geometry", null);
assertNotNull(o);
assertEquals(type.getDescriptor("geometry"), o);
}
public void testPath() {
PropertyAccessor accessor = accessor("//name");
Object o = accessor.get(target, "//name", null);
assertNotNull(o);
assertEquals("theName", o);
accessor = accessor("//description");
o = accessor.get(target, "//description", null);
assertNotNull(o);
assertEquals("theDescription", o);
accessor = accessor("//geometry");
o = accessor.get(target, "//geometry", null);
assertNotNull(o);
assertTrue(o instanceof Point);
}
public void testPathType() {
PropertyAccessor accessor = accessor("//name");
Object o = accessor.get(type, "//name", null);
assertNotNull(o);
assertEquals(type.getDescriptor("name"), o);
accessor = accessor("//description");
o = accessor.get(type, "//description", null);
assertNotNull(o);
assertEquals(type.getDescriptor("description"), o);
accessor = accessor("//geometry");
o = accessor.get(type, "//geometry", null);
assertNotNull(o);
assertEquals(type.getDescriptor("geometry"), o);
}
public void testPathWithNamespace() {
PropertyAccessor accessor = accessor("//gml:name");
Object o = accessor.get(target, "//gml:name", null);
assertNotNull(o);
assertEquals("theName", o);
accessor = accessor("//gml:description");
o = accessor.get(target, "//gml:description", null);
assertNotNull(o);
assertEquals("theDescription", o);
accessor = accessor("//test:geometry");
o = accessor.get(target, "//test:geometry", null);
assertNotNull(o);
assertTrue(o instanceof Point);
}
public void testPathWithNamespaceType() {
PropertyAccessor accessor = accessor("//gml:name");
Object o = accessor.get(type, "//gml:name", null);
assertNotNull(o);
assertEquals(type.getDescriptor("name"), o);
accessor = accessor("//gml:description");
o = accessor.get(type, "//gml:description", null);
assertNotNull(o);
assertEquals(type.getDescriptor("description"), o);
accessor = accessor("//test:geometry");
o = accessor.get(type, "//test:geometry", null);
assertNotNull(o);
assertEquals(type.getDescriptor("geometry"), o);
}
public void testIndex() {
PropertyAccessor accessor = accessor("*[1]");
Object o = accessor.get(target, "*[1]", null);
assertNotNull(o);
assertEquals("theName", o);
accessor = accessor("*[2]");
o = accessor.get(target, "*[2]", null);
assertNotNull(o);
assertEquals("theDescription", o);
accessor = accessor("*[3]");
o = accessor.get(target, "*[3]", null);
assertNotNull(o);
assertTrue(o instanceof Point);
}
public void testIndexType() {
PropertyAccessor accessor = accessor("*[1]");
Object o = accessor.get(type, "*[1]", null);
assertNotNull(o);
assertEquals(type.getDescriptor("name"), o);
accessor = accessor("*[2]");
o = accessor.get(type, "*[2]", null);
assertNotNull(o);
assertEquals(type.getDescriptor("description"), o);
accessor = accessor("*[3]");
o = accessor.get(type, "*[3]", null);
assertNotNull(o);
assertEquals(type.getDescriptor("geometry"), o);
}
public void testPosition() {
PropertyAccessor accessor = accessor("*[position()=1]");
Object o = accessor.get(target, "*[position()=1]", null);
assertEquals("theName", o);
accessor = accessor("*[position()=2]");
o = accessor.get(target, "*[position()=2]", null);
assertNotNull(o);
assertEquals("theDescription", o);
accessor = accessor("*[position()=3]");
o = accessor.get(target, "*[position()=3]", null);
assertNotNull(o);
assertTrue(o instanceof Point);
}
public void testPositionType() {
PropertyAccessor accessor = accessor("*[position()=1]");
Object o = accessor.get(type, "*[position()=1]", null);
assertEquals(type.getDescriptor("name"), o);
accessor = accessor("*[position()=2]");
o = accessor.get(type, "*[position()=2]", null);
assertNotNull(o);
assertEquals(type.getDescriptor("description"), o);
accessor = accessor("*[position()=3]");
o = accessor.get(type, "*[position()=3]", null);
assertNotNull(o);
assertEquals(type.getDescriptor("geometry"), o);
}
public void testId() {
PropertyAccessor accessor = accessor("./@gml:id");
Object o = accessor.get(target, "./@gml:id", null);
assertEquals("fid", o);
}
public void testEmptyXpath() {
assertFalse(accessor("").canHandle(target, "", null));
}
PropertyAccessor accessor(String xpath) {
return new XPathPropertyAccessorFactory().createPropertyAccessor(SimpleFeature.class,
xpath, null, null);
}
}