/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2008 - 2011, Geomatys
*
* 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; either
* version 2.1 of the License, or (at your option) any later version.
*
* 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.geotoolkit.style;
import java.awt.Color;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.measure.Unit;
import javax.swing.Icon;
import org.geotoolkit.factory.Factory;
import org.geotoolkit.factory.FactoryFinder;
import org.geotoolkit.style.function.Categorize;
import org.geotoolkit.style.function.DefaultCategorize;
import org.geotoolkit.style.function.DefaultInterpolate;
import org.geotoolkit.style.function.DefaultInterpolationPoint;
import org.geotoolkit.style.function.Interpolate;
import org.geotoolkit.style.function.InterpolationPoint;
import org.geotoolkit.style.function.Method;
import org.geotoolkit.style.function.Mode;
import org.geotoolkit.style.function.ThreshholdsBelongTo;
import org.apache.sis.util.iso.SimpleInternationalString;
import org.apache.sis.util.logging.Logging;
import org.geotoolkit.filter.DefaultPropertyName;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.Id;
import org.opengis.filter.expression.Expression;
import org.opengis.filter.expression.Function;
import org.opengis.filter.expression.Literal;
import org.opengis.metadata.citation.OnlineResource;
import org.opengis.style.AnchorPoint;
import org.opengis.style.ChannelSelection;
import org.opengis.style.ColorMap;
import org.opengis.style.ColorReplacement;
import org.opengis.style.ContrastEnhancement;
import org.opengis.style.ContrastMethod;
import org.opengis.style.Description;
import org.opengis.style.Displacement;
import org.opengis.style.ExtensionSymbolizer;
import org.opengis.style.ExternalGraphic;
import org.opengis.style.ExternalMark;
import org.opengis.style.FeatureTypeStyle;
import org.opengis.style.Fill;
import org.opengis.style.Font;
import org.opengis.style.Graphic;
import org.opengis.style.GraphicFill;
import org.opengis.style.GraphicLegend;
import org.opengis.style.GraphicStroke;
import org.opengis.style.GraphicalSymbol;
import org.opengis.style.Halo;
import org.opengis.style.LabelPlacement;
import org.opengis.style.LinePlacement;
import org.opengis.style.LineSymbolizer;
import org.opengis.style.Mark;
import org.opengis.style.OverlapBehavior;
import org.opengis.style.PointPlacement;
import org.opengis.style.PointSymbolizer;
import org.opengis.style.PolygonSymbolizer;
import org.opengis.style.RasterSymbolizer;
import org.opengis.style.Rule;
import org.opengis.style.SelectedChannelType;
import org.opengis.style.SemanticType;
import org.opengis.style.ShadedRelief;
import org.opengis.style.Stroke;
import org.opengis.style.Symbolizer;
import org.opengis.style.TextSymbolizer;
import org.opengis.util.GenericName;
import org.opengis.util.InternationalString;
import static org.geotoolkit.style.StyleConstants.*;
import org.geotoolkit.style.function.DefaultJenks;
import org.geotoolkit.style.function.Jenks;
/**
* Factory for creating Styles.
* Symbolizer and underneath objects are immutable
* while Style, FeatureTypeStyle and Rule are mutable.
*
* @author Johann Sorel (Geomatys)
* @module
*/
public class DefaultStyleFactory extends Factory implements MutableStyleFactory {
private static final Logger LOGGER = Logging.getLogger("org.geotoolkit.style");
private static final FilterFactory FF = FactoryFinder.getFilterFactory(null);
// TEMPORARY FIX ///////////////////////////////////////////////////////////
@Override
public Literal literal(final Color color) {
if (color == null) {
return null;
}
return FF.literal(color);
}
//--------------------------------------------------------------------------
// Style creation methods --------------------------------------------------
//--------------------------------------------------------------------------
@Override
public MutableStyle style(){
return new DefaultMutableStyle();
}
@Override
public MutableStyle style(final Symbolizer symbol){
final MutableFeatureTypeStyle fts = featureTypeStyle(symbol);
final MutableStyle catalog = new DefaultMutableStyle();
catalog.featureTypeStyles().add(fts);
return catalog;
}
@Override
public MutableStyle style(final Symbolizer[] symbols){
final MutableFeatureTypeStyle fts = featureTypeStyle(symbols);
final MutableStyle catalog = new DefaultMutableStyle();
catalog.featureTypeStyles().add(fts);
return catalog;
}
@Override
public MutableStyle style(final String name, final Description description,
final boolean isDefault, final List<FeatureTypeStyle> featureTypeStyles,
final Symbolizer defaultSymbolizer) {
final MutableStyle style = new DefaultMutableStyle();
style.setName(name);
style.setDescription(description);
style.setDefault(isDefault);
for(FeatureTypeStyle fts : featureTypeStyles){
if(fts instanceof MutableFeatureTypeStyle){
style.featureTypeStyles().add((MutableFeatureTypeStyle)fts);
}else{
throw new IllegalArgumentException("This factory implementation requiere a list of MutableFeatureTypeStyle");
}
}
style.setDefaultSpecification(defaultSymbolizer);
return style;
}
@Override
public MutableFeatureTypeStyle featureTypeStyle(){
return new DefaultMutableFeatureTypeStyle();
}
@Override
public MutableFeatureTypeStyle featureTypeStyle(final Symbolizer symbol){
final MutableRule rule = rule(symbol);
final MutableFeatureTypeStyle fts = new DefaultMutableFeatureTypeStyle();
fts.rules().add(rule);
return fts;
}
@Override
public MutableFeatureTypeStyle featureTypeStyle(final Symbolizer[] symbol){
final MutableRule rule = rule(symbol);
final DefaultMutableFeatureTypeStyle fts = new DefaultMutableFeatureTypeStyle();
fts.rules().add(rule);
return fts;
}
@Override
public MutableFeatureTypeStyle featureTypeStyle(final String name,
final Description description, final Id definedFor,
final Set<GenericName> featureTypeNames, final Set<SemanticType> types,
final List<Rule> rules) {
final MutableFeatureTypeStyle fts = new DefaultMutableFeatureTypeStyle();
fts.setName(name);
fts.setDescription(description);
fts.setFeatureInstanceIDs(definedFor);
if(featureTypeNames != null){
fts.featureTypeNames().addAll(featureTypeNames);
}
if(types != null){
fts.semanticTypeIdentifiers().addAll(types);
}
for(Rule rule : rules){
fts.rules().add((MutableRule)rule);
}
return fts;
}
@Override
public MutableRule rule(){
return new DefaultMutableRule();
}
@Override
public MutableRule rule(final Symbolizer symbol){
final MutableRule rule = new DefaultMutableRule();
rule.symbolizers().add(symbol);
return rule;
}
@Override
public MutableRule rule(final Symbolizer[] symbols){
final MutableRule rule = new DefaultMutableRule();
for(final Symbolizer s : symbols){
rule.symbolizers().add(s);
}
return rule;
}
@Override
public MutableRule rule(final String name, final Description description,
final GraphicLegend legend, final double min, final double max,
final List<Symbolizer> symbolizers, final Filter filter) {
final MutableRule rule = new DefaultMutableRule();
rule.setName(name);
rule.setDescription(description);
rule.setLegendGraphic(legend);
rule.setMinScaleDenominator(min);
rule.setMaxScaleDenominator(max);
rule.symbolizers().addAll(symbolizers);
rule.setFilter(filter);
return rule;
}
//--------------------------------------------------------------------------
// Symbolizer creation methods ---------------------------------------------
//--------------------------------------------------------------------------
@Override
public PointSymbolizer pointSymbolizer(){
return DEFAULT_POINT_SYMBOLIZER;
}
@Override
public PointSymbolizer pointSymbolizer(final Graphic graphic,
final String geometryPropertyName){
return pointSymbolizer(null, geometryPropertyName,DEFAULT_DESCRIPTION,DEFAULT_UOM,graphic);
}
@Override
public PointSymbolizer pointSymbolizer(final String name,
final String geom, final Description desc,
final Unit<?> unit, final Graphic graphic) {
return pointSymbolizer(name,
geom==null ? null : new DefaultPropertyName(geom),
desc, unit, graphic);
}
@Override
public PointSymbolizer pointSymbolizer(final String name, final Expression geom,
final Description desc, final Unit<?> unit, final Graphic graphic) {
return new DefaultPointSymbolizer(graphic, unit, geom, name, desc);
}
@Override
public LineSymbolizer lineSymbolizer(){
return DEFAULT_LINE_SYMBOLIZER;
}
@Override
public LineSymbolizer lineSymbolizer(final Stroke stroke,
final String geometryPropertyName){
return lineSymbolizer(null, geometryPropertyName, DEFAULT_DESCRIPTION, DEFAULT_UOM, stroke, LITERAL_ZERO_FLOAT);
}
@Override
public LineSymbolizer lineSymbolizer(final String name, final String geom,
final Description desc, final Unit<?> uom,
final Stroke stroke, final Expression offset) {
return lineSymbolizer(name,
geom==null ? null : new DefaultPropertyName(geom),
desc, uom, stroke, offset);
}
@Override
public LineSymbolizer lineSymbolizer(final String name, final Expression geom,
final Description desc, final Unit<?> uom,
final Stroke stroke, final Expression offset) {
return new DefaultLineSymbolizer(stroke, offset, uom, geom, name, desc);
}
@Override
public PolygonSymbolizer polygonSymbolizer(){
return DEFAULT_POLYGON_SYMBOLIZER;
}
@Override
public PolygonSymbolizer polygonSymbolizer(final Stroke stroke, final Fill fill,
final String geometryPropertyName){
return polygonSymbolizer(null, geometryPropertyName,DEFAULT_DESCRIPTION,
DEFAULT_UOM, stroke, fill,DEFAULT_DISPLACEMENT, LITERAL_ZERO_FLOAT);
}
@Override
public PolygonSymbolizer polygonSymbolizer(final String name, final String geom,
final Description desc, final Unit<?> uom, final Stroke stroke,
final Fill fill, final Displacement disp, final Expression offset) {
return polygonSymbolizer(name,
geom==null ? null : new DefaultPropertyName(geom),
desc, uom, stroke, fill, disp, offset);
}
@Override
public PolygonSymbolizer polygonSymbolizer(final String name,
final Expression geom, final Description desc,
final Unit<?> uom, final Stroke stroke, final Fill fill,
final Displacement disp, final Expression offset) {
return new DefaultPolygonSymbolizer(stroke, fill, disp, offset, uom, geom, name, desc);
}
@Override
public TextSymbolizer textSymbolizer(){
return DEFAULT_TEXT_SYMBOLIZER;
}
@Override
public TextSymbolizer textSymbolizer(final Fill fill, final Font font, final Halo halo,
final Expression label, final LabelPlacement labelPlacement, final String geometryPropertyName){
return textSymbolizer(null,geometryPropertyName,DEFAULT_DESCRIPTION,DEFAULT_UOM,
label, font, labelPlacement, halo, fill
);
}
@Override
public TextSymbolizer textSymbolizer(final String name, final String geom,
final Description desc, final Unit<?> uom, final Expression label,
final Font font, final LabelPlacement placement,
final Halo halo, final Fill fill) {
return textSymbolizer(name,
geom==null ? null : new DefaultPropertyName(geom),
desc, uom, label, font, placement, halo, fill
);
}
@Override
public TextSymbolizer textSymbolizer(final String name, final Expression geom,
final Description desc, final Unit<?> uom,
final Expression label, final Font font, final LabelPlacement placement,
final Halo halo, final Fill fill) {
return new DefaultTextSymbolizer(label, font, placement, halo, fill, uom, geom, name, desc);
}
@Override
public RasterSymbolizer rasterSymbolizer(){
return DEFAULT_RASTER_SYMBOLIZER;
}
@Override
public RasterSymbolizer rasterSymbolizer(final String geometryPropertyName,
final Expression opacity, final ChannelSelection channel,
final OverlapBehavior overlap, final ColorMap colorMap,
final ContrastEnhancement ce, final ShadedRelief relief,
final Symbolizer outline){
return rasterSymbolizer(null, geometryPropertyName, DEFAULT_DESCRIPTION,
DEFAULT_UOM, opacity, channel, overlap, colorMap, ce, relief, outline);
}
@Override
public RasterSymbolizer rasterSymbolizer(final String name, final String geom,
final Description desc, final Unit<?> uom, final Expression opacity,
final ChannelSelection selection, final OverlapBehavior overlap,
final ColorMap colorMap, final ContrastEnhancement enchance,
final ShadedRelief relief, final Symbolizer outline) {
return rasterSymbolizer(name,
geom==null ? null : new DefaultPropertyName(geom),
desc,uom, opacity, selection, overlap, colorMap, enchance, relief, outline);
}
@Override
public RasterSymbolizer rasterSymbolizer(final String name,
final Expression geom, final Description desc,
final Unit<?> uom, final Expression opacity,
final ChannelSelection selection,
final OverlapBehavior overlap, final ColorMap colorMap,
final ContrastEnhancement enchance, final ShadedRelief relief,
final Symbolizer outline) {
return new DefaultRasterSymbolizer(opacity, selection, overlap, colorMap,
enchance, relief, outline, uom, geom, name, desc);
}
@Override
public ExtensionSymbolizer extensionSymbolizer(final String name,
final String geom, final Description description,
final Unit<?> unit, final String extensionName,
final Map<String, Expression> parameters) {
return extensionSymbolizer(name,
geom==null ? null : new DefaultPropertyName(geom),
description, unit, extensionName, parameters);
}
@Override
public ExtensionSymbolizer extensionSymbolizer(final String name,
final Expression geometry, final Description description,
final Unit<?> unit, final String extensionName,
final Map<String, Expression> parameters) {
throw new UnsupportedOperationException("Not supported yet.");
}
//--------------------------------------------------------------------------
// Underneath Immutable objects creation methods ---------------------------
//--------------------------------------------------------------------------
@Override
public AnchorPoint anchorPoint(){
return DEFAULT_ANCHOR_POINT;
}
@Override
public AnchorPoint anchorPoint(final double x, final double y){
return new DefaultAnchorPoint(FF.literal(x), FF.literal(y));
}
@Override
public AnchorPoint anchorPoint(final Expression x, final Expression y){
return new DefaultAnchorPoint(x,y);
}
@Override
public Description description(){
return DEFAULT_DESCRIPTION;
}
@Override
public Description description(final String title, final String abs) {
return description(new SimpleInternationalString(title),
new SimpleInternationalString(abs));
}
@Override
public Description description(final InternationalString title, final InternationalString abs){
return new DefaultDescription(title, abs);
}
@Override
public Displacement displacement(){
return DEFAULT_DISPLACEMENT;
}
@Override
public Displacement displacement(final double x, final double y){
return new DefaultDisplacement(FF.literal(x), FF.literal(y));
}
@Override
public Displacement displacement(final Expression x, final Expression y){
return new DefaultDisplacement(x, y);
}
@Override
public Graphic graphic(){
return DEFAULT_GRAPHIC;
}
@Override
public Mark mark(){
return DEFAULT_GRAPHICAL_SYMBOL;
}
@Override
public ColorMap colorMap(){
return DEFAULT_RASTER_COLORMAP;
}
@Override
public Stroke stroke(){
return DEFAULT_STROKE;
}
@Override
public Fill fill(){
return DEFAULT_FILL;
}
@Override
public Font font(){
return DEFAULT_FONT;
}
@Override
public PointPlacement pointPlacement(){
return DEFAULT_POINTPLACEMENT;
}
@Override
public ContrastEnhancement contrastEnhancement(){
return DEFAULT_CONTRAST_ENHANCEMENT;
}
@Override
public Fill fill(final Color color){
return new DefaultFill(
null,
literal(color),
null);
}
@Override
public Stroke stroke(final Color color, final double width){
return new DefaultStroke(
literal(color),
null,
FF.literal(width),
null,
null,
null,
null);
}
@Override
public Stroke stroke(final Color color, final double width, final float[] dashes){
return new DefaultStroke(
literal(color),
null,
FF.literal(width),
null,
null,
dashes,
null);
}
@Override
public Halo halo(final Color color, final double width){
return new DefaultHalo(
fill(color),
FF.literal(width));
}
@Override
public LabelPlacement labelPlacement(){
return DEFAULT_POINTPLACEMENT;
}
@Override
public Font font(final int size){
return new DefaultFont(
new ArrayList<Expression>(),
null,
null,
FF.literal(size));
}
@Override
public Mark getCircleMark(){
return new DefaultMark(
MARK_CIRCLE,
null,
null);
}
@Override
public Mark getXMark(){
return new DefaultMark(
MARK_X,
null,
null);
}
@Override
public Mark getStarMark(){
return new DefaultMark(
MARK_STAR,
null,
null);
}
@Override
public Mark getSquareMark(){
return new DefaultMark(
MARK_SQUARE,
null,
null);
}
@Override
public Mark getCrossMark(){
return new DefaultMark(
MARK_CROSS,
null,
null);
}
@Override
public Mark getTriangleMark(){
return new DefaultMark(
MARK_TRIANGLE,
null,
null);
}
@Override
public Mark mark(final Expression wellKnownName, final Stroke stroke, final Fill fill){
return new DefaultMark(wellKnownName, fill, stroke);
}
@Override
public LinePlacement linePlacement(final Expression offset){
return new DefaultLinePlacement(
offset,
FF.literal(0),
FF.literal(0),
false,
false,
false);
}
@Override
public Fill fill(final Expression color, final Expression opacity){
return new DefaultFill(null, color, opacity);
}
@Override
public Fill fill(final Expression color){
return new DefaultFill(null, color, null);
}
@Override
public Stroke stroke(final Expression color, final Expression width){
return new DefaultStroke(
color,
null,
width,
null,
null,
null,
null);
}
@Override
public Stroke stroke(final Expression color,
final Expression width, final Expression opacity){
return new DefaultStroke(
color,
opacity,
width,
null,
null,
null,
null);
}
@Override
public Font font(final Expression fontFamily, final Expression fontStyle, final Expression fontWeight,
final Expression fontSize){
return new DefaultFont(Collections.singletonList(fontFamily), fontStyle, fontWeight, fontSize);
}
@Override
public ContrastEnhancement contrastEnhancement(final Expression gammaValue){
return new DefaultContrastEnhancement(null, gammaValue);
}
@Override
public SelectedChannelType selectedChannelType(final String name, final Expression gammaValue){
return new DefaultSelectedChannelType(name, contrastEnhancement(gammaValue));
}
@Override
public ShadedRelief shadedRelief(final Expression reliefFactor){
return new DefaultShadedRelief(false, reliefFactor);
}
@Override
public ShadedRelief shadedRelief(final Expression relief, final boolean bright) {
return new DefaultShadedRelief(bright, relief);
}
@Override
public ColorMap colorMap(final Expression propertyName,
final Expression... mapping) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public ColorMap colorMap(final Function function){
return new DefaultColorMap(function);
}
@Override
public ColorReplacement colorReplacement(final Expression propertyName,
final Expression... mapping) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public ColorReplacement colorReplacement(final Function recode){
return new DefaultColorReplacement(recode);
}
@Override
public ContrastEnhancement contrastEnhancement(final Expression gamma,
final ContrastMethod method) {
return new DefaultContrastEnhancement(method, gamma);
}
@Override
public ExternalGraphic externalGraphic(final Icon icon,
final Collection<ColorReplacement> replaces) {
return new DefaultExternalGraphic(icon, replaces);
}
@Override
public ExternalGraphic externalGraphic(final URL url, final String format){
URI uri = null;
try { uri = url.toURI();
} catch (URISyntaxException ex) {
LOGGER.log(Level.WARNING, null, ex);
}
return new DefaultExternalGraphic(
onlineResource(uri),
format,
null);
}
@Override
public ExternalGraphic externalGraphic(final String uri, final String format){
URI uri2 = null;
try { uri2 = new URI(uri);
} catch (URISyntaxException ex) {
LOGGER.log(Level.WARNING, null, ex);
}
return new DefaultExternalGraphic(
onlineResource(uri2),
format,
null);
}
@Override
public ExternalGraphic externalGraphic(final OnlineResource resource,
final String format, final Collection<ColorReplacement> replaces){
return new DefaultExternalGraphic(resource, format, replaces);
}
@Override
public ExternalMark externalMark(final Icon icon) {
return new DefaultExternalMark(icon);
}
@Override
public ExternalMark externalMark(final OnlineResource online,
final String format, final int index){
return new DefaultExternalMark(online, format, index);
}
@Override
public Fill fill(final GraphicFill fill, final Expression color,
final Expression opacity){
return new DefaultFill(fill,color,opacity);
}
@Override
public Font font(final List<Expression> family, final Expression style,
final Expression weight, final Expression size){
return new DefaultFont(family, style, weight, size);
}
@Override
public Graphic graphic(final List<GraphicalSymbol> symbols,
final Expression opacity,
final Expression size,
final Expression rotation,
final AnchorPoint anchor,
final Displacement disp){
return new DefaultGraphic(symbols, opacity, size, rotation, anchor, disp);
}
@Override
public GraphicFill graphicFill(final List<GraphicalSymbol> symbols,
final Expression opacity,
final Expression size,
final Expression rotation,
final AnchorPoint anchor,
final Displacement disp){
return new DefaultGraphicFill(symbols, opacity, size, rotation, anchor, disp);
}
@Override
public GraphicStroke graphicStroke(final List<GraphicalSymbol> symbols,
final Expression opacity,
final Expression size,
final Expression rotation,
final AnchorPoint anchor,
final Displacement disp,
final Expression initial,
final Expression gap){
return new DefaultGraphicStroke(symbols, opacity, size, rotation, anchor, disp, initial, gap);
}
@Override
public Halo halo(final Fill fill, final Expression radius){
return new DefaultHalo(fill, radius);
}
@Override
public LinePlacement linePlacement(final Expression offset,
final Expression initial,
final Expression gap,
final boolean repeated,
final boolean aligned,
final boolean generalize){
return new DefaultLinePlacement(offset, initial, gap, repeated, aligned, generalize);
}
@Override
public Mark mark(final Expression wkn, final Fill fill, final Stroke stroke){
return new DefaultMark(wkn, fill, stroke);
}
@Override
public Mark mark(final ExternalMark external, final Fill fill, final Stroke stroke){
return new DefaultMark(external, fill, stroke);
}
@Override
public OnlineResource onlineResource(final URI uri){
return new DefaultOnlineResource(uri,null,null,null,null,null);
}
@Override
public PointPlacement pointPlacement(final AnchorPoint anchor, final Displacement disp, final Expression rotation){
return new DefaultPointPlacement(anchor, disp, rotation);
}
@Override
public SelectedChannelType selectedChannelType(final String name, final ContrastEnhancement enchance){
return new DefaultSelectedChannelType(name, enchance);
}
@Override
public Stroke stroke(
final Expression color,
final Expression opacity,
final Expression width,
final Expression join,
final Expression cap,
final float[] dashes,
final Expression offset){
return new DefaultStroke(color, opacity, width, join, cap, dashes, offset);
}
@Override
public Stroke stroke(
final GraphicStroke stroke,
final Expression color,
final Expression opacity,
final Expression width,
final Expression join,
final Expression cap,
final float[] dashes,
final Expression offset){
return new DefaultStroke(stroke, color, opacity, width, join, cap, dashes, offset);
}
@Override
public Stroke stroke(
final GraphicFill fill,
final Expression color,
final Expression opacity,
final Expression width,
final Expression join,
final Expression cap,
final float[] dashes,
final Expression offset){
return new DefaultStroke(fill, color, opacity, width, join, cap, dashes, offset);
}
@Override
public GraphicFill graphicFill(final Graphic graphic) {
return new DefaultGraphicFill(graphic.graphicalSymbols(),
graphic.getOpacity(), graphic.getSize(), graphic.getRotation(),
graphic.getAnchorPoint(),graphic.getDisplacement());
}
@Override
public GraphicStroke graphicStroke(final Graphic graphic) {
return new DefaultGraphicStroke(graphic.graphicalSymbols(),
graphic.getOpacity(), graphic.getSize(), graphic.getRotation(),
graphic.getAnchorPoint(),graphic.getDisplacement(),
FF.literal(0),FF.literal(0));
}
@Override
public GraphicStroke graphicStroke(final Graphic graphic, final Expression gap, final Expression initialGap) {
return new DefaultGraphicStroke(graphic.graphicalSymbols(),
graphic.getOpacity(), graphic.getSize(), graphic.getRotation(),
graphic.getAnchorPoint(),graphic.getDisplacement(),
initialGap,gap);
}
@Override
public GraphicLegend graphicLegend(final List<GraphicalSymbol> symbols,
final Expression opacity, final Expression size,
final Expression rotation, final AnchorPoint anchorPoint,
final Displacement displacement) {
return new DefaultGraphicLegend(symbols,
opacity, size, rotation,
anchorPoint, displacement);
}
@Override
public GraphicLegend graphicLegend(final Graphic graphic) {
return new DefaultGraphicLegend(graphic.graphicalSymbols(),
graphic.getOpacity(), graphic.getSize(), graphic.getRotation(),
graphic.getAnchorPoint(),graphic.getDisplacement());
}
@Override
public ChannelSelection channelSelection(final SelectedChannelType red,
final SelectedChannelType green, final SelectedChannelType blue) {
return new DefaultChannelSelection(red,green,blue);
}
@Override
public ChannelSelection channelSelection(final SelectedChannelType gray) {
return new DefaultChannelSelection(gray);
}
//Functions-----------------------------------------------------------------
@Override
public Categorize categorizeFunction(final Expression lookup, final Map<Expression,Expression> values,
final ThreshholdsBelongTo belongs, final Literal fallback) {
return new DefaultCategorize(lookup,
values,
belongs,
fallback);
}
@Override
public Interpolate interpolateFunction(final Expression lookup, final List<InterpolationPoint> values,
final Method method, final Mode mode, final Literal fallback) {
return new DefaultInterpolate(lookup, values, method, mode, fallback);
}
@Override
public InterpolationPoint interpolationPoint(final Number data, final Expression value){
return new DefaultInterpolationPoint(data, value);
}
@Override
public Jenks jenksFunction(Literal classNumber, Literal paletteName, Literal fallback, List<Literal> noData) {
return new DefaultJenks(classNumber, paletteName, fallback, noData);
}
}