Package org.geotools.data.complex
Class DataAccessMappingFeatureIterator
Object
AbstractMappingFeatureIterator
DataAccessMappingFeatureIterator
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Iterator<Feature>
,IMappingFeatureIterator
,FeatureIterator<Feature>
- Direct Known Subclasses:
MappingAttributeIterator
,XmlMappingFeatureIterator
A Feature iterator that operates over the FeatureSource of a
FeatureTypeMapping and produces Features of the output schema by applying the
mapping rules to the Features of the source schema.
This iterator acts like a one-to-one mapping, producing a Feature of the target type for each feature of the source type.
- Since:
- 2.4
- Author:
- Gabriel Roldan (Axios Engineering), Ben Caradoc-Davies (CSIRO Earth Science and Resource Engineering), Rini Angreani (CSIRO Earth Science and Resource Engineering), Russell Petty (GeoScience Victoria)
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Feature
This is the feature that will be processed in next()protected List<Expression>
protected FeatureSource<? extends FeatureType,
? extends Feature> protected CoordinateReferenceSystem
Reprojected CRS from the source simple features, or nullprotected FeatureCollection<? extends FeatureType,
? extends Feature> protected AttributeDescriptor
Fields inherited from class AbstractMappingFeatureIterator
attf, dataMaxFeatures, featureCounter, filterFac, ftf, GEOMETRY_FACTORY, includeMandatory, LOGGER, mapping, MULTI_VALUE_TYPE, namespaceAwareFilterFactory, namespaces, query, requestMaxFeatures, RESOLVE_TIMEOUT_POLL_INTERVAL, resolveDepth, resolveTimeOut, selectedMapping, selectedProperties, store, transaction, UNBOUNDED_MULTI_VALUE, XLINK_HREF_NAME, xpathAttributeBuilder
-
Constructor Summary
ConstructorsConstructorDescriptionDataAccessMappingFeatureIterator
(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query) DataAccessMappingFeatureIterator
(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, boolean isFiltered, boolean removeQueryLimitIfDenormalised) DataAccessMappingFeatureIterator
(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, boolean isFiltered, boolean removeQueryLimitIfDenormalised, boolean hasPostFilter) DataAccessMappingFeatureIterator
(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, boolean isFiltered, boolean removeQueryLimitIfDenormalised, boolean hasPostFilter, Transaction transaction) DataAccessMappingFeatureIterator
(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, Query unrolledQuery, boolean removeQueryLimitIfDenormalised) DataAccessMappingFeatureIterator
(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, Query unrolledQuery, boolean removeQueryLimitIfDenormalised, Transaction transaction) -
Method Summary
Modifier and TypeMethodDescriptionboolean
checkForeignIdValues
(List<Object> foreignIdValues) Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged.protected boolean
checkForeignIdValues
(List<Object> foreignIdValues, Feature next) Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged.protected void
cleanEmptyElements
(Feature target) protected void
protected Feature
protected String
extractIdForAttribute
(Expression idExpression, Object sourceInstance) Based on the set of xpath expression/id extracting expression, finds the ID for the attributeidExpression
from the source complex attribute.protected String
extractIdForFeature
(Feature feature) getForeignIdValues
(Object source) Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged.getIdValues
(Object source) Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged.FeatureSource<? extends FeatureType,
? extends Feature> For testing purposes.protected String
protected FeatureIterator<? extends Feature>
getSources
(String id) Get all source features of the provided id.protected Object
getValue
(Expression expression, Object sourceFeature) protected Object
getValues
(boolean isMultiValued, Expression expression, Object sourceFeatureInput) boolean
hasNext()
Does another Feature exist in this Iteration.protected void
initialiseSourceFeatures
(FeatureTypeMapping mapping, Query query, CoordinateReferenceSystem targetCRS) protected boolean
isByReference
(Map<Name, Expression> clientPropsMappings, boolean isNested) Checks if client property has xlink:ref in it, if the attribute is for chained features.protected boolean
boolean
isReprojectionCrsEqual
(CoordinateReferenceSystem source, CoordinateReferenceSystem target) protected boolean
boolean
peekNextValue
(Expression prop) protected Object
peekValue
(Object source, Expression prop) protected Feature
protected Attribute
setAttributeValue
(Attribute target, String id, Object source, AttributeMapping attMapping, Object values, XPathUtil.StepList inputXpath, List<PropertyName> selectedProperties) Sets the values of grouping attributes.void
setForeignIds
(List<Expression> ids) Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged.void
setListFilter
(Filter filter) setNextFeature
(String fId, List<Object> foreignIdValues) protected void
setXlinkReference
(Attribute target, Map<Name, Expression> clientPropsMappings, Object value, XPathUtil.StepList xpath, AttributeType targetNodeType) Set xlink:href client property for multi-valued chained features.skip()
void
skipNestedMapping
(AttributeMapping attMapping, List<Feature> sources) protected boolean
skipTopElement
(Name topElement, AttributeMapping attMapping, AttributeType type) protected boolean
protected boolean
Methods inherited from class AbstractMappingFeatureIterator
close, getClientProperties, getTransaction, getUnrolledQuery, isHasNextCalled, next, referenceToIdentifier, remove, setAttributeContent, setClientProperties, setGeometryUserData, setHasNextCalled
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface Iterator
forEachRemaining
-
Field Details
-
reprojection
Reprojected CRS from the source simple features, or null -
curSrcFeature
This is the feature that will be processed in next() -
mappedSource
-
sourceFeatures
-
foreignIds
-
targetFeature
-
-
Constructor Details
-
DataAccessMappingFeatureIterator
public DataAccessMappingFeatureIterator(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, boolean isFiltered, boolean removeQueryLimitIfDenormalised) throws IOException - Throws:
IOException
-
DataAccessMappingFeatureIterator
public DataAccessMappingFeatureIterator(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, boolean isFiltered, boolean removeQueryLimitIfDenormalised, boolean hasPostFilter) throws IOException - Throws:
IOException
-
DataAccessMappingFeatureIterator
public DataAccessMappingFeatureIterator(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, boolean isFiltered, boolean removeQueryLimitIfDenormalised, boolean hasPostFilter, Transaction transaction) throws IOException - Throws:
IOException
-
DataAccessMappingFeatureIterator
public DataAccessMappingFeatureIterator(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query) throws IOException - Throws:
IOException
-
DataAccessMappingFeatureIterator
public DataAccessMappingFeatureIterator(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, Query unrolledQuery, boolean removeQueryLimitIfDenormalised) throws IOException - Parameters:
mapping
- place holder for the target type, the surrogate FeatureSource and the mappings between them.query
- the query over the target feature type, that is to be unpacked to its equivalent over the surrogate feature type.- Throws:
IOException
-
DataAccessMappingFeatureIterator
public DataAccessMappingFeatureIterator(AppSchemaDataAccess store, FeatureTypeMapping mapping, Query query, Query unrolledQuery, boolean removeQueryLimitIfDenormalised, Transaction transaction) throws IOException - Throws:
IOException
-
-
Method Details
-
isTransactionOwner
public boolean isTransactionOwner() -
hasNext
public boolean hasNext()Description copied from interface:FeatureIterator
Does another Feature exist in this Iteration.Iterator defin: Returns true if the iteration has more elements. (In other words, returns true if next would return an element rather than throwing an exception.)
- Specified by:
hasNext
in interfaceFeatureIterator<Feature>
- Specified by:
hasNext
in interfaceIterator<Feature>
- Specified by:
hasNext
in classAbstractMappingFeatureIterator
- Returns:
- true if more Features exist, false otherwise.
-
getSourceFeatureIterator
- Specified by:
getSourceFeatureIterator
in classAbstractMappingFeatureIterator
-
isSourceFeatureIteratorNull
protected boolean isSourceFeatureIteratorNull()- Specified by:
isSourceFeatureIteratorNull
in classAbstractMappingFeatureIterator
-
peekValue
-
peekNextValue
-
setForeignIds
Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged. -
getForeignIdValues
Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged. -
checkForeignIdValues
Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged. -
getIdValues
Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged. -
checkForeignIdValues
Only used for Joining, to make sure that rows with different foreign id's aren't interpreted as one feature and merged. -
initialiseSourceFeatures
protected void initialiseSourceFeatures(FeatureTypeMapping mapping, Query query, CoordinateReferenceSystem targetCRS) throws IOException - Specified by:
initialiseSourceFeatures
in classAbstractMappingFeatureIterator
- Throws:
IOException
-
unprocessedFeatureExists
protected boolean unprocessedFeatureExists()- Specified by:
unprocessedFeatureExists
in classAbstractMappingFeatureIterator
-
extractIdForFeature
-
extractIdForAttribute
Description copied from class:AbstractMappingFeatureIterator
Based on the set of xpath expression/id extracting expression, finds the ID for the attributeidExpression
from the source complex attribute.- Specified by:
extractIdForAttribute
in classAbstractMappingFeatureIterator
- Parameters:
idExpression
- the location path of the attribute to be created, for which to obtain the id by evaluating the correspondingorg.geotools.filter.Expression
fromsourceInstance
.sourceInstance
- a complex attribute which is the source of the mapping.- Returns:
- the ID to be applied to a new attribute instance addressed by
attributeXPath
, ornull
if there is no an id mapping for that attribute.
-
isNextSourceFeatureNull
protected boolean isNextSourceFeatureNull()- Specified by:
isNextSourceFeatureNull
in classAbstractMappingFeatureIterator
-
sourceFeatureIteratorHasNext
protected boolean sourceFeatureIteratorHasNext()- Specified by:
sourceFeatureIteratorHasNext
in classAbstractMappingFeatureIterator
-
getValues
-
setAttributeValue
protected Attribute setAttributeValue(Attribute target, String id, Object source, AttributeMapping attMapping, Object values, XPathUtil.StepList inputXpath, List<PropertyName> selectedProperties) throws IOException Sets the values of grouping attributes.- Returns:
- Feature. Target feature sets with simple attributes
- Throws:
IOException
-
setXlinkReference
protected void setXlinkReference(Attribute target, Map<Name, Expression> clientPropsMappings, Object value, XPathUtil.StepList xpath, AttributeType targetNodeType) Set xlink:href client property for multi-valued chained features. This has to be specially handled because we don't want to encode the nested features attributes, since it's already an xLink. Also we need to eliminate duplicates.- Parameters:
target
- The target attributeclientPropsMappings
- Client properties mappingsvalue
- Nested featuresxpath
- Attribute xPath where the client properties are to be settargetNodeType
- Target node type
-
setNextFeature
- Throws:
IOException
-
skipNestedMapping
public void skipNestedMapping(AttributeMapping attMapping, List<Feature> sources) throws IOException - Throws:
IOException
-
skip
- Throws:
IOException
-
computeNext
- Specified by:
computeNext
in classAbstractMappingFeatureIterator
- Throws:
IOException
-
getSources
Get all source features of the provided id. This assumes the source features are grouped by id.- Parameters:
id
- The feature id- Returns:
- list of source features
- Throws:
IOException
-
getNextFeatureId
-
cleanEmptyElements
- Throws:
DataSourceException
-
skipTopElement
-
populateFeatureData
- Specified by:
populateFeatureData
in classAbstractMappingFeatureIterator
- Throws:
IOException
-
closeSourceFeatures
protected void closeSourceFeatures()- Specified by:
closeSourceFeatures
in classAbstractMappingFeatureIterator
-
getValue
- Specified by:
getValue
in classAbstractMappingFeatureIterator
-
isByReference
Checks if client property has xlink:ref in it, if the attribute is for chained features.- Parameters:
clientPropsMappings
- the client properties mappingsisNested
- true if we're dealing with chained/nested features
-
isReprojectionCrsEqual
public boolean isReprojectionCrsEqual(CoordinateReferenceSystem source, CoordinateReferenceSystem target) -
setListFilter
-
getMappedSource
For testing purposes.- Returns:
- the feature source providing input features to be mapped to target features
-