/* (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.kml.icons;
import java.awt.Color;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.styling.ExternalGraphic;
import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.Graphic;
import org.geotools.styling.PointSymbolizer;
import org.geotools.styling.Rule;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.styling.StyleFactory2;
import org.geotools.styling.Symbolizer;
import org.junit.BeforeClass;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory2;
public class IconTestSupport {
protected static SimpleFeature fieldIs1;
protected static SimpleFeature fieldIs2;
protected static StyleFactory2 styleFactory;
protected static FilterFactory2 filterFactory;
@BeforeClass
public static void classSetup() {
styleFactory = (StyleFactory2) CommonFactoryFinder.getStyleFactory();
filterFactory = (FilterFactory2) CommonFactoryFinder.getFilterFactory2();
SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
typeBuilder.setName("example");
typeBuilder.setNamespaceURI("http://example.com/");
typeBuilder.setSRS("EPSG:4326");
typeBuilder.add("field", String.class);
SimpleFeatureType featureType = typeBuilder.buildFeatureType();
SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(featureType);
featureBuilder.set("field", "1");
fieldIs1 = featureBuilder.buildFeature(null);
featureBuilder.set("field", "2");
fieldIs2 = featureBuilder.buildFeature(null);
}
protected String queryString(Map<String, String> params) {
try {
StringBuilder buff = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first) {
first = false;
} else {
buff.append("&");
}
buff.append(entry.getKey())
.append("=")
.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return buff.toString();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
protected final PointSymbolizer mark(String name, Color stroke, Color fill,
float opacity, int size) {
return SLD.pointSymbolizer(SLD.createPointStyle(name, stroke, fill, opacity, size));
}
protected final PointSymbolizer externalGraphic(String url, String format) {
ExternalGraphic exGraphic = styleFactory.createExternalGraphic(url, format);
Graphic graphic = styleFactory.createGraphic(new ExternalGraphic[] { exGraphic }, null, null, null, null, null);
return styleFactory.createPointSymbolizer(graphic, null);
}
protected final PointSymbolizer grayCircle() {
return mark("circle", Color.BLACK, Color.GRAY, 1f, 16);
}
protected final Rule rule(Filter filter, Symbolizer... symbolizer) {
Rule rule = styleFactory.createRule();
rule.setFilter(filter);
for (Symbolizer s : symbolizer) rule.symbolizers().add(s);
return rule;
}
protected final Rule catchAllRule(Symbolizer... symbolizer) {
Rule rule = styleFactory.createRule();
for (Symbolizer s : symbolizer) rule.symbolizers().add(s);
return rule;
}
protected final Rule elseRule(Symbolizer... symbolizer) {
Rule rule = styleFactory.createRule();
rule.setElseFilter(true);
for (Symbolizer s : symbolizer) rule.symbolizers().add(s);
return rule;
}
protected final FeatureTypeStyle featureTypeStyle(Rule... rules) {
FeatureTypeStyle ftStyle = styleFactory.createFeatureTypeStyle();
for (Rule r : rules) ftStyle.rules().add(r);
return ftStyle;
}
protected final Style styleFromRules(Rule... rules) {
return style(featureTypeStyle(rules));
}
protected final Style style(FeatureTypeStyle... ftStyles) {
Style style = styleFactory.createStyle();
for (FeatureTypeStyle f : ftStyles) style.featureTypeStyles().add(f);
return style;
}
}