/* * 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 org.opengis.filter.Filter; import org.opengis.style.Description; /** * 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 * *
* The details of this object are taken from the OGC * Styled-Layer Descriptor Report (OGC 02-070) version 1.0.0.: *
* <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>
*
*
* @source $URL$
*/
public interface Rule {
/**
* Gets the name of the rule.
*
* @return The name of the rule. This provides a way to identify a rule.
*/
String getName();
/**
* 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 style.
* @return Human readable description for use in user interfaces
* @since 2.5.x
*/
Description getDescription();
/**
* Gets the title.
*
* @return The title of the rule. This is a brief, human readable,
* description of the rule.
* @deprecated use getDescription().getTitle().getString()
*/
@Deprecated
String getTitle();
/**
* Sets the title.
*
* @param title The title of the rule. This is a brief, human readable,
* description of the rule.
*/
@Deprecated
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()
*/
@Deprecated
String getAbstract();
/**
* Sets the abstract text for the rule.
*
* @param abstractStr The abstract text, a more detailed description of the
* rule.
*/
@Deprecated
void setAbstract(String abstractStr);
/**
* The smallest value for scale denominator at which symbolizers contained
* by this rule should be applied.
*
* @return The smallest (inclusive) denominator value that this rule will
* be active for.
*/
double getMinScaleDenominator();
/**
* 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.
*
* @return The largest (exclusive) denominator value that this rule will be
* active for.
*/
double getMaxScaleDenominator();
/**
* 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);
Filter getFilter();
void setFilter(Filter filter);
/**
* @deprecated renamed in isElseFilter in 2.6.x
*/
@Deprecated
boolean hasElseFilter();
void setIsElseFilter(boolean defaultb);
/**
* 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 An array of Graphic objects, any of which can be used as the
* legend.
*
* @deprecated there will be only one legend graphic in 2.6.x
*/
@Deprecated
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 An array of Graphic objects, any of which can be used as
* the legend.
*
* @deprecated there will be only one graphic legend in 2.6.x
*/
@Deprecated
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.
*
* @deprecated replaced by a live list symbolizers() in 2.6.x
*/
@Deprecated
Symbolizer[] getSymbolizers();
/**
* 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 replaced by a live list in 2.6.x
*/
@Deprecated
void setSymbolizers(Symbolizer[] symbolizers);
void accept(StyleVisitor visitor);
}