Package org.apache.sis.feature
Class FeatureOperations
A set of pre-defined operations expecting a
If no
Feature
as input and producing an Attribute
as output.
Those operations can be used for creating dynamic properties which compute their value on-the-fly
from the values of other properties.
A flexible but relatively cumbersome way to define arbitrary computations is to subclass AbstractOperation
.
This FeatureOperations
class provides a more convenient way to get a few commonly-used operations.
Operation name, designation and description
All operations are identified by a programmatic name, but can also have a more human-readable designation for Graphical User Interfaces (GUI). Those identification information are specified in aMap<String,?>
.
The recognized entries are the same than the ones documented in AbstractIdentifiedType
, augmented with
entries that describe the operation result. Those entries are summarized below:
Map key | Value type | Returned by |
---|---|---|
"name" | GenericName or String |
Operation.getName() (mandatory) |
"definition" | InternationalString or String |
Operation.getDefinition() |
"designation" | InternationalString or String |
Operation.getDesignation() |
"description" | InternationalString or String |
Operation.getDescription() |
"result.name" | GenericName or String |
Attribute.getName() on the result |
"result.definition" | InternationalString or String |
Attribute.getDefinition() on the result |
"result.designation" | InternationalString or String |
Attribute.getDesignation() on the result |
"result.description" | InternationalString or String |
Attribute.getDescription() on the result |
"locale" | Locale |
(none) |
"result.*"
entry is provided, then the methods in this class will use some default name, designation
and other information for the result type. Those defaults are operation specific; they are often, but not necessarily,
the same than the operation name, designation, etc.- Since:
- 0.7
Defined in the sis-feature
module
-
Method Summary
Modifier and TypeMethodDescriptionstatic AbstractOperation
compound
(Map<String, ?> identification, String delimiter, String prefix, String suffix, AbstractIdentifiedType... singleAttributes) Creates an operation concatenating the string representations of the values of multiple properties.static AbstractOperation
envelope
(Map<String, ?> identification, CoordinateReferenceSystem crs, AbstractIdentifiedType... geometryAttributes) Creates an operation computing the envelope that encompass all geometries found in the given attributes.static AbstractOperation
link
(Map<String, ?> identification, AbstractIdentifiedType referent) Creates an operation which is only an alias for another property.
-
Method Details
-
link
Creates an operation which is only an alias for another property.Example: features often have a property that can be used as identifier or primary key. But the name of that property may vary between features of different types. For example features of type Country may have identifiers named “ISO country code” while features of type Car may have identifiers named “license plate number”. In order to simplify identifier usages regardless of their name, an application could choose to add in all features a virtual property namedSince this method does not create new property (it only redirects to an existing property), this method ignores all"identifier"
which links to whatever property is used as an identifier in an arbitrary feature. So the definition of the Car feature could contain the following code:AttributeType licensePlateNumber = ...; // Attribute creation omitted for brevity FeatureType car = new DefaultFeatureType(..., // Arguments omitted for brevity licensePlateNumber, model, owner, FeatureOperations.link(singletonMap(NAME_KEY, "identifier"), licensePlateNumber);
"result.*"
entries in the givenidentification
map.Read/write behavior
Since theOperation.apply(…)
method returns directly the property identified by thereferent
argument, the returned property is writable if the referenced property is also writable.Warning: The type ofreferent
parameter will be changed toPropertyType
if and when such interface will be defined in GeoAPI.- Parameters:
identification
- the name and other information to be given to the operation.referent
- the referenced attribute or feature association.- Returns:
- an operation which is an alias for the
referent
property. - See Also:
-
compound
public static AbstractOperation compound(Map<String, ?> identification, String delimiter, String prefix, String suffix, AbstractIdentifiedType... singleAttributes) throws UnconvertibleObjectExceptionCreates an operation concatenating the string representations of the values of multiple properties. This operation can be used for creating a compound key as aString
that consists of two or more attribute values that uniquely identify a feature instance.The
delimiter
,prefix
andsuffix
arguments given to this method are used in the same way thanStringJoiner
, except for null values. Null prefix, suffix and property values are handled as if they were empty strings.If the same character sequences than the given delimiter appears in a property value, the
'\'
escape character will be inserted before that sequence. If the'\'
character appears in a property value, it will be doubled.Restrictions
- The single properties can be either attributes or operations that produce attributes;
feature associations are not allowed, unless they have an
"sis:identifier"
property. - Each attribute shall contain at most one value; multi-valued attributes are not allowed.
- The delimiter can not contain the
'\'
escape character.
Read/write behavior
This operation supports both reading and writing. When setting a value on the attribute created by this operation, the given string value will be split around thedelimiter
and each substring will be forwarded to the corresponding single property.Warning: The type ofsingleAttributes
elements will be changed toPropertyType
if and when such interface will be defined in GeoAPI.- Parameters:
identification
- the name and other information to be given to the operation.delimiter
- the characters to use as delimiter between each single property value.prefix
- characters to use at the beginning of the concatenated string, ornull
if none.suffix
- characters to use at the end of the concatenated string, ornull
if none.singleAttributes
- identification of the single attributes (or operations producing attributes) to concatenate.- Returns:
- an operation which concatenates the string representations of all referenced single property values.
- Throws:
UnconvertibleObjectException
- if at least one of the givensingleAttributes
uses a value class which is not convertible from aString
.IllegalArgumentException
- ifsingleAttributes
is an empty sequence, or contains a property which is neither anAttributeType
or anOperation
computing an attribute, or an attribute has a maximum number of occurrences greater than 1.- See Also:
- The single properties can be either attributes or operations that produce attributes;
feature associations are not allowed, unless they have an
-
envelope
public static AbstractOperation envelope(Map<String, ?> identification, CoordinateReferenceSystem crs, AbstractIdentifiedType... geometryAttributes) throws FactoryExceptionCreates an operation computing the envelope that encompass all geometries found in the given attributes. Geometries can be in different coordinate reference systems; they will be transformed to the first non-null CRS in the following choices:- the CRS specified to this method,
- the CRS of the default geometry, or
- the CRS of the first non-empty geometry.
Attribute
with values of typeEnvelope
. If thecrs
argument given to this method is non-null, then the envelope CRS will be that CRS.Limitations
If a geometry contains other geometries, this operation queries only the envelope of the root geometry. It is the root geometry responsibility to take in account the envelope of all its children.Read/write behavior
This operation is read-only. Calls toAttribute.setValue(Envelope)
will result in anIllegalStateException
to be thrown.Warning: The type ofgeometryAttributes
elements will be changed toPropertyType
if and when such interface will be defined in GeoAPI.- Parameters:
identification
- the name and other information to be given to the operation.crs
- the Coordinate Reference System in which to express the envelope, ornull
.geometryAttributes
- the operation or attribute type from which to get geometry values. Any element which isnull
or has a non-geometric value class will be ignored.- Returns:
- an operation which will compute the envelope encompassing all geometries in the given attributes.
- Throws:
FactoryException
- if a coordinate operation to the target CRS can not be created.
-