All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opengis.style.Rule Maven / Gradle / Ivy

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2011, Open Source Geospatial Foundation (OSGeo)
 *    (C) 2008, Open Geospatial Consortium Inc.
 *
 *    All Rights Reserved. http://www.opengis.org/legal/
 */
package org.opengis.style;

import static org.opengis.annotation.Obligation.*;
import static org.opengis.annotation.Specification.*;

import java.util.List;
import org.opengis.annotation.Extension;
import org.opengis.annotation.UML;
import org.opengis.annotation.XmlElement;
import org.opengis.filter.Filter;
import org.opengis.metadata.citation.OnLineResource;

/**
 * A rule consists of two important parts: a {@linkplain Filter filter} and a list of {@linkplain
 * Symbol symbols}. When it is time to draw a given feature, the rendering engine examines each rule
 * in the FeatureStyle, first checking its Filter (or ElseFilter). If the Filter passes, then every
 * Symbolizer for that rule is applied to the given feature.
 *
 * @version Symbology Encoding
 *     Implementation Specification 1.1.0
 * @author Open Geospatial Consortium
 * @author Johann Sorel (Geomatys)
 * @author Chris Dillard (SYS Technologies)
 * @since GeoAPI 2.2
 */
@XmlElement("Rule")
@UML(identifier = "PF_PortrayalRule", specification = ISO_19117)
public interface Rule {

    /**
     * Returns a name for this rule. This can be any string that uniquely identifies this rule
     * within a given canvas. It is not meant to be human-friendly. (The "title" property is meant
     * to be human friendly.)
     *
     * @return a name for this rule.
     */
    @XmlElement("Name")
    @UML(identifier = "ruleName", obligation = MANDATORY, specification = ISO_19117)
    String getName();

    /**
     * Returns the description of this rule.
     *
     * @return Description with usual informations used for user interfaces.
     */
    @XmlElement("Description")
    @UML(identifier = "description", obligation = OPTIONAL, specification = ISO_19117)
    Description getDescription();

    /**
     * Returns a small Graphic that could be used by the rendering engine to draw a legend window.
     *
     * 

A nice user interface may want to present the user with a legend that indicates how * features of a given type are being portrayed. Through its {@code LegendGraphic} property, a * {@code Rule} may provide a custom picture to be used in such a legend window. */ @XmlElement("LegendGraphic") GraphicLegend getLegend(); /** * Returns the filter that will limit the features for which this {@code Rule} will fire. This * can only be non-null if {@link #isElseFilter} returns false. If this value is null and {@code * isElseFilter} is false, this means that this {@code Rule} should fire for all features. * * @return Filter, use Filter.INCLUDES to indicate everything; or Filter.EXCLUDES for an "else" * rule */ @XmlElement("Filter") @UML(identifier = "queryStatement", obligation = MANDATORY, specification = ISO_19117) Filter getFilter(); /** * Returns true if this {@code Rule} is to fire only if no other rules in the containing style * have fired yet. If this is true, then the {@linkplain #getFilter filter} must be * Filter.EXCLUDES. * * @return true if the filter is an else filter */ @XmlElement("ElseFilter") boolean isElseFilter(); /** * Returns the minimum value (inclusive) in the denominator of the current map scale at which * this {@code Rule} will fire. If, for example, the {@code MinScaleDenominator} were 10000, * then this rule would only fire at scales of 1:X where X is greater than 10000. A value of * zero indicates that there is no minimum. * * @return Min scale double value */ @XmlElement("MinScaleDenominator") double getMinScaleDenominator(); /** * Returns the maximum value (exclusive) in the denominator of the current map scale at which * this {@code Rule} will fire. If, for example, the {@code MaxScaleDenominator} were 98765, * then this rule would only fire at scales of 1:X where X is less than 98765. A value of {@link * Double#POSITIVE_INFINITY} indicates that there is no maximum. * * @return Max scale double value */ @XmlElement("MaxScaleDenominator") double getMaxScaleDenominator(); /** * This method returns the list of Symbolizer objects contained by this {@code Rule}. * *

We use a list of to enable the possibility for an implementation to * return a special type of Symbolizer. This doesnt mean a Rule must return a list of * PointSymbolizer or TextSymbolizer only, no. The purpose of this if to offer the solution to * return different implementations like MutableSymbolizer or RichSymbolizer and then avoid * redundant cast in the code. If you dont intend to use a special interface you can override * this method by : List symbolizers(); * * @return the list of Symbolizer */ @XmlElement("Symbolizer") @UML(identifier = "portrayAction", obligation = MANDATORY, specification = ISO_19117) List symbolizers(); /** * It is common to have a style coming from a external xml file, this method provide a way to * get the original source if there is one. OGC SLD specification can use this method to know if * a style must be written completely or if writing the online resource path is enough. * * @return OnlineResource or null */ OnLineResource getOnlineResource(); /** * calls the visit method of a StyleVisitor * * @param visitor the style visitor */ @Extension Object accept(StyleVisitor visitor, Object extraData); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy