/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2014 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.importer.transform;
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 java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import static junit.framework.Assert.assertEquals;
import org.geoserver.importer.ImportTask;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.referencing.CRS;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
/**
*
* @author Ian Schneider <ischneider@boundlessgeo.com>
*/
public class TransformTest {
SimpleFeatureTypeBuilder sftb = new SimpleFeatureTypeBuilder();
@Test
public void testDateFormatTransform() throws Exception {
SimpleFeature f = transform(new DateFormatTransform("date", null),
"date", String.class, "1980-09-10"
);
GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
cal.setTime((Date) f.getAttribute("date"));
assertEquals(1980, cal.get(GregorianCalendar.YEAR));
assertEquals(9, cal.get(GregorianCalendar.MONTH) + 1); // 0-based month!
assertEquals(10, cal.get(GregorianCalendar.DAY_OF_MONTH));
}
@Test
public void testIntegerFieldToDateTransform() throws Exception {
SimpleFeature f = transform(new IntegerFieldToDateTransform("number"),
"number", Integer.class, 1999
);
GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
cal.setTime((Date) f.getAttribute("number"));
assertEquals(1999, cal.get(GregorianCalendar.YEAR));
assertEquals(1, cal.get(GregorianCalendar.MONTH) + 1); // 0-based month!
assertEquals(1, cal.get(GregorianCalendar.DAY_OF_MONTH));
}
@Test
public void testNumberFormatTransform() throws Exception {
SimpleFeature f = transform(new NumberFormatTransform("number", Double.class),
"number", String.class, "1234.5678"
);
assertEquals(1234.5678, f.getAttribute("number"));
}
@Test
public void testReprojectTransform() throws Exception {
CoordinateReferenceSystem crs = CRS.decode("EPSG:3857");
sftb.setName("ft");
sftb.add("geom", Geometry.class, CRS.decode("EPSG:4326"));
SimpleFeatureType type = sftb.buildFeatureType();
SimpleFeature f = transformType(new ReprojectTransform(crs), (SimpleFeatureType) type,
new GeometryFactory().createPoint(new Coordinate(1d, 1d))
);
Point p = (Point) f.getAttribute("geom");
assertEquals(111319.49079327357, p.getX());
assertEquals(111325.14286638486, p.getY());
}
private SimpleFeature transform(InlineVectorTransform transform, Object... values) throws Exception {
Object[] args = new Object[values.length / 3];
for (int i = 0; i < values.length; i+=3) {
args[i] = values[i + 2];
}
return transformType(transform, buildType(values), args);
}
private SimpleFeature transformType(InlineVectorTransform transform, SimpleFeatureType type, Object... values) throws Exception {
transform.init();
SimpleFeatureBuilder sfb = new SimpleFeatureBuilder(type);
SimpleFeature orig = sfb.buildFeature("x22", values);
ImportTask task = new ImportTask();
SimpleFeatureType newType;
if (transform instanceof ReprojectTransform) {
// ReprojectTransform does stuff with task
newType = type;
} else {
newType = transform.apply(task, null, type);
}
sfb = new SimpleFeatureBuilder(newType);
SimpleFeature neu = sfb.buildFeature("z19", values);
transform.apply(task, null, orig, neu);
return neu;
}
private SimpleFeatureType buildType(Object[] args) {
sftb.setName("ft");
for (int i = 0; i < args.length; i += 3) {
sftb.add((String) args[i], (Class) args[i + 1]);
}
return sftb.buildFeatureType();
}
}