/* * 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.styling; import java.util.List; import org.opengis.filter.Filter; import org.opengis.metadata.citation.OnLineResource; import org.opengis.style.GraphicLegend; /** * A rule is used to attach a condition to, and group, the individual * symbolizers used for rendering. The Title and Abstract describe the rule * and may be used to generate a legend, as may the LegendGraphic. The Filter, * ElseFilter, MinScale and MaxScale elements allow the selection of features * and rendering scales for a rule. The scale selection works as follows. * When a map is to be rendered, the scale denominator is computed and all * rules in all UserStyles that have a scale outside of the request range are * dropped. (This also includes Rules that have an ElseFilter.) An * ElseFilter is simply an ELSE condition to the conditions (Filters) of all * other rules in the same UserStyle. The exact meaning of the ElseFilter is * determined after Rules have been eliminated for not fitting the rendering * scale. This definition of the behaviour of ElseFilters may seem a little * strange, but it allows for scale-dependent and scale-independent ELSE * conditions. For the Filter, only SqlExpression is available for * specification, but this is a hack and should be replaced with Filter as * defined in WFS. A missing Filter element means "always true". If a set of * Rules has no ElseFilters, then some features may not be rendered (which is * presumably the desired behavior). The Scales are actually scale * denominators (as double floats), so "10e6" would be interpreted as 1:10M. A * missing MinScale means there is no lower bound to the scale-denominator * range (lim[x->0+](x)), and a missing MaxScale means there is no upper bound * (infinity). 0.28mm * * <p> * The details of this object are taken from the <a * href="https://portal.opengeospatial.org/files/?artifact_id=1188"> OGC * Styled-Layer Descriptor Report (OGC 02-070) version 1.0.0.</a>: * <pre><code> * <xsd:element name="Rule"> * <xsd:annotation> * <xsd:documentation> * A Rule is used to attach property/scale conditions to and group * the individual symbolizers used for rendering. * </xsd:documentation> * </xsd:annotation> * <xsd:complexType> * <xsd:sequence> * <xsd:element ref="sld:Name" minOccurs="0"/> * <xsd:element ref="sld:Title" minOccurs="0"/> * <xsd:element ref="sld:Abstract" minOccurs="0"/> * <xsd:element ref="sld:LegendGraphic" minOccurs="0"/> * <xsd:choice minOccurs="0"> * <xsd:element ref="ogc:Filter"/> * <xsd:element ref="sld:ElseFilter"/> * </xsd:choice> * <xsd:element ref="sld:MinScaleDenominator" minOccurs="0"/> * <xsd:element ref="sld:MaxScaleDenominator" minOccurs="0"/> * <xsd:element ref="sld:Symbolizer" maxOccurs="unbounded"/> * </xsd:sequence> * </xsd:complexType> * </xsd:element> * </code></pre> * </p> * * @source $URL$ */ public interface Rule extends org.opengis.style.Rule { /** * Sets the name of the rule. * * @param name The name of the rule. This provides a way to identify a * rule. */ void setName(String name); /** * Description for this rule. * @return Human readable description for use in user interfaces * @since 2.5.x */ Description getDescription(); /** * Description for this rule. * @param description Human readable title and abstract. */ void setDescription(org.opengis.style.Description description); /** * Gets the title. * * @return The title of the rule. This is a brief, human readable, * description of the rule. * @deprecated use getDescription().getTitle().getString() */ String getTitle(); /** * Sets the title. * * @param title The title of the rule. This is a brief, human readable, * description of the rule. */ void setTitle(String title); /** * Gets the abstract text for the rule. * * @return The abstract text, a more detailed description of the rule. * @deprecated use getDescription().getAbstract().getString() */ String getAbstract(); /** * Sets the abstract text for the rule. * * @param abstractStr The abstract text, a more detailed description of the * rule. * @deprecated use getDescription().setAbstract() */ void setAbstract(String abstractStr); /** * The smallest value for scale denominator at which symbolizers contained * by this rule should be applied. * * @param scale The smallest (inclusive) denominator value that this rule * will be active for. */ void setMinScaleDenominator(double scale); /** * The largest value for scale denominator at which symbolizers contained * by this rule should be applied. * * @param scale The largest (exclusive) denominator value that this rule * will be active for. */ void setMaxScaleDenominator(double scale); /** * This is the filter used to select content for this rule to display * <p> * @return Filter use to select content for this rule to display, Filter.INCLUDES to include all content; of isElseFilter for null */ Filter getFilter(); /** * Filter used to select content for this rule to display. * <p> * This filter is only consulted if isElseFilter is false. * * @param filter */ void setFilter(Filter filter); /** * @deprecated Please use isElseFilter */ boolean hasElseFilter(); /** * * @param isElse if this rule should accept any features not already rendered */ void setElseFilter(boolean isElse); /** * @param isElse * @deprecaated Please use setElseFilter( isElse ); */ void setIsElseFilter( boolean isElse ); /** * */ public GraphicLegend getLegend(); /** * @param legend */ void setLegend( GraphicLegend legend); /** * A set of equivalent Graphics in different formats which can be used as a * legend against features stylized by the symbolizers in this rule. * * @return A single Graphic matching the getLegend() * @deprecated Please use getLegend */ Graphic[] getLegendGraphic(); /** * A set of equivalent Graphics in different formats which can be used as a * legend against features stylized by the symbolizers in this rule. * * @param graphics Graphic objects; the first one will be used to configure getGraphicLenged * @deprecated Please use setLegend */ void setLegendGraphic(Graphic[] graphics); /** * The symbolizers contain the actual styling information for different * geometry types. A single feature may be rendered by more than one of * the symbolizers returned by this method. It is important that the * symbolizers be applied in the order in which they are returned if the * end result is to be as intended. All symbolizers should be applied to * all features which make it through the filters in this rule regardless * of the features' geometry. For example, a polygon symbolizer should be * applied to line geometries and even points. If this is not the desired * beaviour, ensure that either the filters block inappropriate features * or that the FeatureTypeStyler which contains this rule has its * FeatureTypeName or SemanticTypeIdentifier set appropriately. * * @return An array of symbolizers to be applied, in sequence, to all of * the features addressed by the FeatureTypeStyler which contains * this rule. * @param Please use symbolizers().toArray( new Symbolizer[0] ) */ Symbolizer[] getSymbolizers(); /** * Symbolizers used, in order, to portray the features selected by this rule. * <p> * Please note that this list may be modified direct. */ List<org.geotools.styling.Symbolizer> symbolizers(); /** * The symbolizers contain the actual styling information for different * geometry types. A single feature may be rendered by more than one of * the symbolizers returned by this method. It is important that the * symbolizers be applied in the order in which they are returned if the * end result is to be as intended. All symbolizers should be applied to * all features which make it through the filters in this rule regardless * of the features' geometry. For example, a polygon symbolizer should be * applied to line geometries and even points. If this is not the desired * beaviour, ensure that either the filters block inappropriate features * or that the FeatureTypeStyler which contains this rule has its * FeatureTypeName or SemanticTypeIdentifier set appropriately. * * @param symbolizers An array of symbolizers to be applied, in sequence, * to all of the features addressed by the FeatureTypeStyler which * contains this rule. * @deprecated please use symbolizers().addAll() */ void setSymbolizers(Symbolizer[] symbolizers); /** * @return Location where this style is defined; file or server; or null if unknown */ public OnLineResource getOnlineResource(); /** * @param resource Indicates where this style is defined */ void setOnlineResource(OnLineResource online); /** * Used to traverse the style data structure. * @param visitor */ void accept(org.geotools.styling.StyleVisitor visitor); }