/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, availible at the root * application directory. */ package org.vfny.geoserver.wms.requests; import java.util.Map; import org.geoserver.wms.WMS; import org.geotools.styling.Rule; import org.geotools.styling.Style; import org.opengis.feature.type.FeatureType; /** * Holds the parsed parameters for a GetLegendGraphic WMS request. * * <p> * The GET parameters of the GetLegendGraphic operation are defined as follows * (from SLD 1.0 spec, ch.12):<br> * <pre> * <table> * <tr><td><b>Parameter</b></td><td><b>Required</b></td><td><b>Description</b></td></tr> * <tr><td>VERSION </td><td>Required </td><td>Version as required by OGC interfaces.</td></tr> * <tr><td>REQUEST </td><td>Required </td><td>Value must be GetLegendRequest . </td></tr> * <tr><td>LAYER </td><td>Required </td><td>Layer for which to produce legend graphic. </td></tr> * <tr><td>STYLE </td><td>Optional </td><td>Style of layer for which to produce legend graphic. If not present, the default style is selected. The style may be any valid style available for a layer, including non-SLD internally-defined styles.</td></tr> * <tr><td>FEATURETYPE </td><td>Optional </td><td>Feature type for which to produce the legend graphic. This is not needed if the layer has only a single feature type. </td></tr> * <tr><td>RULE </td><td>Optional </td><td>Rule of style to produce legend graphic for, if applicable. In the case that a style has multiple rules but no specific rule is selected, then the map server is obligated to produce a graphic that is representative of all of the rules of the style.</td></tr> * <tr><td>SCALE </td><td>Optional </td><td>In the case that a RULE is not specified for a style, this parameter may assist the server in selecting a more appropriate representative graphic by eliminating internal rules that are outof- scope. This value is a standardized scale denominator, defined in Section 10.2</td></tr> * <tr><td>SLD </td><td>Optional </td><td>This parameter specifies a reference to an external SLD document. It works in the same way as the SLD= parameter of the WMS GetMap operation. </td></tr> * <tr><td>SLD_BODY </td><td>Optional </td><td>This parameter allows an SLD document to be included directly in an HTTP-GET request. It works in the same way as the SLD_BODY= parameter of the WMS GetMap operation.</td></tr> * <tr><td>FORMAT </td><td>Required </td><td>This gives the MIME type of the file format in which to return the legend graphic. Allowed values are the same as for the FORMAT= parameter of the WMS GetMap request. </td></tr> * <tr><td>WIDTH </td><td>Optional </td><td>This gives a hint for the width of the returned graphic in pixels. Vector-graphics can use this value as a hint for the level of detail to include. </td></tr> * <tr><td>HEIGHT </td><td>Optional </td><td>This gives a hint for the height of the returned graphic in pixels. </td></tr> * <tr><td>EXCEPTIONS </td><td>Optional </td><td>This gives the MIME type of the format in which to return exceptions. Allowed values are the same as for the EXCEPTIONS= parameter of the WMS GetMap request.</td></tr> * <tr><td>TRANSPARENT </td><td>Optional </td><td><code>true</code> if the legend image background should be transparent. Defaults to <code>false</code>.</td></tr> * </table> * </pre> * </p> * * <p> * The GetLegendGraphic operation itself is optional for an SLD-enabled WMS. It * provides a general mechanism for acquiring legend symbols, beyond the * LegendURL reference of WMS Capabilities. Servers supporting the * GetLegendGraphic call might code LegendURL references as GetLegendGraphic * for interface consistency. Vendorspecific parameters may be added to * GetLegendGraphic requests and all of the usual OGC-interface options and * rules apply. No XML-POST method for GetLegendGraphic is presently defined. * </p> * * @author Gabriel Roldan, Axios Engineering * @version $Id$ */ public class GetLegendGraphicRequest extends WMSRequest { /** DOCUMENT ME! */ public static final String SLD_VERSION = "1.0.0"; /** * default legend graphic width, in pixels, to apply if no WIDTH parameter * was passed */ public static final int DEFAULT_WIDTH = 20; /** * default legend graphic height, in pixels, to apply if no WIDTH parameter * was passed */ public static final int DEFAULT_HEIGHT = 20; /** * The default image format in which to produce a legend graphic. Not * really used when performing user requests, since FORMAT is a mandatory * parameter, but by now serves as a default for expressing LegendURL * layer attribute in GetCapabilities. */ public static final String DEFAULT_FORMAT = "image/png"; /** The featuretype of the requested LAYER */ private FeatureType layer; /** * The Style object for styling the legend graphic, or layer's default if * not provided. This style can be aquired by evaluating the STYLE * parameter, which provides one of the layer's named styles, the SLD * parameter, which provides a URL for an external SLD document, or the * SLD_BODY parameter, which provides the SLD body in the request body. */ private Style style; /** * should hold FEATURETYPE parameter value, though not used by now, since * GeoServer WMS still does not supports nested layers and layers has only * a single feature type. This should change in the future. */ private String featureType; /** holds RULE parameter value, or <code>null</code> if not provided */ private Rule rule; /** * holds the standarized scale denominator passed as the SCALE parameter * value, or <code>-1.0</code> if not provided */ private double scale = -1d; /** * the mime type of the file format in which to return the legend graphic, * as requested by the FORMAT request parameter value. */ private String format; /** * the width in pixels of the returned graphic, or * <code>DEFAULT_WIDTH</code> if not provided */ private int width = DEFAULT_WIDTH; /** * the height in pixels of the returned graphic, or * <code>DEFAULT_HEIGHT</code> if not provided */ private int height = DEFAULT_HEIGHT; /** mime type of the format in which to return exceptions information. */ private String exceptionsFormat = GetMapRequest.SE_XML; /** holds the geoserver-specific getLegendGraphic options for controlling * things like the label font, label font style, label font antialiasing, etc. */ private Map legendOptions; /** * Whether the legend graphic background shall be transparent or not. */ private boolean transparent; /** * Creates a new GetLegendGraphicRequest object. * @param wms The WMS configuration object. */ public GetLegendGraphicRequest(WMS wms) { super("GetLegendGraphic", wms); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getExceptionsFormat() { return exceptionsFormat; } /** * DOCUMENT ME! * * @param exceptionsFormat DOCUMENT ME! */ public void setExceptionsFormat(String exceptionsFormat) { this.exceptionsFormat = exceptionsFormat; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getFeatureType() { return featureType; } /** * DOCUMENT ME! * * @param featureType DOCUMENT ME! */ public void setFeatureType(String featureType) { this.featureType = featureType; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getFormat() { return format; } /** * DOCUMENT ME! * * @param format DOCUMENT ME! */ public void setFormat(String format) { this.format = format; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getHeight() { return height; } /** * DOCUMENT ME! * * @param height DOCUMENT ME! */ public void setHeight(int height) { this.height = height; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public FeatureType getLayer() { return layer; } /** * DOCUMENT ME! * * @param layer DOCUMENT ME! */ public void setLayer(FeatureType layer) { this.layer = layer; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Rule getRule() { return rule; } /** * DOCUMENT ME! * * @param rule DOCUMENT ME! */ public void setRule(Rule rule) { this.rule = rule; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public double getScale() { return scale; } /** * DOCUMENT ME! * * @param scale DOCUMENT ME! */ public void setScale(double scale) { this.scale = scale; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Style getStyle() { return style; } /** * DOCUMENT ME! * * @param style DOCUMENT ME! */ public void setStyle(Style style) { this.style = style; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getWidth() { return width; } /** * DOCUMENT ME! * * @param width DOCUMENT ME! */ public void setWidth(int width) { this.width = width; } /** * Returns the possibly empty set of key/value pair parameters to control * some aspects of legend generation. * <p> * These parameters are meant to be passed as the request parameter * <code>"LEGEND_OPTIONS"</code> with the format * <code>LEGEND_OPTIONS=multiKey:val1,val2,val3;singleKey:val</code>. * </p> * <p> * The known options, all optional, are: * <ul> * <li><code>fontName</code>: name of the system font used for legend * rule names. Defaults to "Sans-Serif" * <li><code>fontStyle</code>: one of "plain", "italic" or "bold" * <li><code>fontSize</code>: integer for the font size in pixels * <li><code>fontColor</code>: a <code>String</code> that represents * an opaque color as a 24-bit integer * <li><code>bgColor</code>: allows to override the legend background * color * <li><code>fontAntiAliasing</code>: a boolean indicating whether to * use antia aliasing in font rendering. Anything of the following works: * "yes", "true", "1". Anything else means false. * <li><code>forceLabels</code>: "on" means labels will always be drawn, * even if only one rule is available. "off" means labels will never be * drawn, even if multiple rules are available. * </ul> * </p> * * @return */ public Map getLegendOptions() { return legendOptions; } /** * Sets the legend options parameters. * @param legendOptions the key/value pair of legend options strings * @see #getLegendOptions() */ public void setLegendOptions(Map legendOptions) { this.legendOptions = legendOptions; } /** * Sets the value of the background transparency flag depending on the value * of the <code>TRANSPARENT</code> request parameter. * * @param transparentBackground * whether the legend graphic background shall be transparent or * not */ public void setTransparent(boolean transparentBackground) { this.transparent = transparentBackground; } /** * Returns the value of the optional request parameter * <code>TRANSPARENT</code>, which might be either the literal * <code>true</code> or <code>false</code> and specifies if the * background of the legend graphic to return shall be transparent or not. * <p> * If the <code>TRANSPARENT</code> parameter is not specified, this * property defaults to <code>false</code>. * </p> * * @return whether the legend graphic background shall be transparent or not */ public boolean isTransparent() { return transparent; } }