/*
* 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.brewer.color;
import java.awt.Color;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.geotools.data.DataStore;
import org.geotools.data.DataTestCase;
import org.geotools.data.DefaultQuery;
import org.geotools.data.jdbc.JDBCFeatureSource;
import org.geotools.data.postgis.PostgisDataStoreFactory;
import org.geotools.data.postgis.collection.PostgisFeatureCollection;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.function.ClassificationFunction;
import org.geotools.filter.function.Classifier;
import org.geotools.filter.function.ExplicitClassifier;
import org.geotools.filter.function.UniqueIntervalFunction;
import org.geotools.styling.FeatureTypeStyle;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.PropertyName;
/**
*
* @source $URL$
*/
public class StyleGeneratorOnlineTest extends DataTestCase {
static boolean WKB_ENABLED = true;
static boolean CHECK_TYPE = false;
PostgisTests.Fixture f;
DataStore data;
Map remote;
PostgisFeatureCollection fc;
public StyleGeneratorOnlineTest(String arg0) {
super(arg0);
}
public String getFixtureFile() {
return "fixture.properties";
}
protected void setUp() throws Exception {
super.setUp();
f = PostgisTests.newFixture(getFixtureFile());
remote = new HashMap();
remote.put("dbtype", "postgis");
remote.put("charset", "");
remote.put("host", f.host);
remote.put("port", f.port);
remote.put("database", f.database);
remote.put("user", f.user);
remote.put("passwd", f.password);
remote.put("namespace", f.namespace);
PostgisDataStoreFactory pdsf = new PostgisDataStoreFactory();
data = pdsf.createDataStore(remote);
JDBCFeatureSource featureSource = (JDBCFeatureSource) data.getFeatureSource("bc_hospitals");
fc = new PostgisFeatureCollection(featureSource, DefaultQuery.ALL);
}
protected void tearDown() throws Exception {
fc = null;
data = null;
super.tearDown();
}
/**
* Simple test to ensure unique interval function works on real data
* containing nulls.
*
* @throws Exception
*/
public void testUniqueInterval() throws Exception {
ColorBrewer brewer = new ColorBrewer();
brewer.loadPalettes();
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
PropertyName expr = ff.property("authority");
String paletteName = "YlGn";
//create the classification function
ClassificationFunction function = new UniqueIntervalFunction();
List params = new ArrayList();
params.add(0, expr); //expression
params.add(1, ff.literal(7)); //classes
function.setParameters(params);
Object object = function.evaluate(fc);
assertTrue(object instanceof ExplicitClassifier);
Classifier classifier = (Classifier) object;
Color[] colors = brewer.getPalette(paletteName).getColors(7);
//get the fts
FeatureTypeStyle fts = StyleGenerator.createFeatureTypeStyle(classifier, expr, colors,
"myfts", roadFeatures[0].getFeatureType().getGeometryDescriptor(),
StyleGenerator.ELSEMODE_IGNORE, 0.5, null);
assertNotNull(fts);
}
}