/* (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.importer.transform;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.kml.Folder;
import org.geotools.styling.FeatureTypeStyle;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.Point;
public class KMLPlacemarkTransformTest extends TestCase {
private KMLPlacemarkTransform kmlPlacemarkTransform;
private SimpleFeatureType origType;
private SimpleFeatureType transformedType;
@Override
protected void setUp() throws Exception {
kmlPlacemarkTransform = new KMLPlacemarkTransform();
SimpleFeatureTypeBuilder origBuilder = new SimpleFeatureTypeBuilder();
origBuilder.setName("origtype");
origBuilder.add("name", String.class);
origBuilder.add("description", String.class);
origBuilder.add("LookAt", Point.class);
origBuilder.add("Region", LinearRing.class);
origBuilder.add("Style", FeatureTypeStyle.class);
origBuilder.add("Geometry", Geometry.class);
origBuilder.setDefaultGeometry("Geometry");
origType = origBuilder.buildFeatureType();
SimpleFeatureTypeBuilder transformedBuilder = new SimpleFeatureTypeBuilder();
transformedBuilder.setName("transformedtype");
transformedBuilder.add("name", String.class);
transformedBuilder.add("description", String.class);
transformedBuilder.add("LookAt", Point.class);
transformedBuilder.add("Region", LinearRing.class);
transformedBuilder.add("Style", String.class);
transformedBuilder.add("Geometry", Geometry.class);
transformedBuilder.setDefaultGeometry("Geometry");
transformedBuilder.add("Folder", String.class);
transformedType = transformedBuilder.buildFeatureType();
}
public void testFeatureType() throws Exception {
SimpleFeatureType result = kmlPlacemarkTransform.convertFeatureType(origType);
assertBinding(result, "LookAt", Point.class);
assertBinding(result, "Region", LinearRing.class);
assertBinding(result, "Folder", String.class);
}
private void assertBinding(SimpleFeatureType ft, String attr, Class<?> expectedBinding) {
AttributeDescriptor descriptor = ft.getDescriptor(attr);
Class<?> binding = descriptor.getType().getBinding();
assertEquals(expectedBinding, binding);
}
public void testGeometry() throws Exception {
SimpleFeatureBuilder fb = new SimpleFeatureBuilder(origType);
GeometryFactory gf = new GeometryFactory();
fb.set("Geometry", gf.createPoint(new Coordinate(3d, 4d)));
SimpleFeature feature = fb.buildFeature("testgeometry");
assertEquals("Unexpected Geometry class", Point.class, feature.getAttribute("Geometry")
.getClass());
assertEquals("Unexpected default geometry", Point.class, feature.getDefaultGeometry()
.getClass());
SimpleFeature result = kmlPlacemarkTransform.convertFeature(feature, transformedType);
assertEquals("Invalid Geometry class", Point.class, result.getAttribute("Geometry")
.getClass());
assertEquals("Unexpected default geometry", Point.class, feature.getDefaultGeometry()
.getClass());
}
public void testLookAtProperty() throws Exception {
SimpleFeatureBuilder fb = new SimpleFeatureBuilder(origType);
GeometryFactory gf = new GeometryFactory();
Coordinate c = new Coordinate(3d, 4d);
fb.set("LookAt", gf.createPoint(c));
SimpleFeature feature = fb.buildFeature("testlookat");
assertEquals("Unexpected LookAt attribute class", Point.class,
feature.getAttribute("LookAt").getClass());
SimpleFeature result = kmlPlacemarkTransform.convertFeature(feature, transformedType);
assertEquals("Invalid LookAt attribute class", Point.class, result.getAttribute("LookAt")
.getClass());
}
public void testFolders() throws Exception {
SimpleFeatureBuilder fb = new SimpleFeatureBuilder(origType);
List<Folder> folders = new ArrayList<Folder>(2);
folders.add(new Folder("foo"));
folders.add(new Folder("bar"));
fb.featureUserData("Folder", folders);
SimpleFeature feature = fb.buildFeature("testFolders");
SimpleFeature newFeature = kmlPlacemarkTransform.convertFeature(feature, transformedType);
assertEquals("foo -> bar", newFeature.getAttribute("Folder"));
}
}