Class DataAccessMappingFeatureIterator

  • All Implemented Interfaces:
    Closeable, AutoCloseable, Iterator<Feature>, IMappingFeatureIterator, FeatureIterator<Feature>
    Direct Known Subclasses:
    MappingAttributeIterator, XmlMappingFeatureIterator

    public class DataAccessMappingFeatureIterator
    extends AbstractMappingFeatureIterator
    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)
    • Constructor Detail

      • 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,
                                                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
    • Method Detail

      • 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 interface FeatureIterator<Feature>
        Specified by:
        hasNext in interface Iterator<Feature>
        Specified by:
        hasNext in class AbstractMappingFeatureIterator
        Returns:
        true if more Features exist, false otherwise.
      • peekValue

        protected Object peekValue​(Object source,
                                   Expression prop)
      • peekNextValue

        public Object peekNextValue​(Expression prop)
      • setForeignIds

        public 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.
      • getForeignIdValues

        public List<Object> 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.
      • checkForeignIdValues

        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.
      • getIdValues

        public List<Object> 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.
      • checkForeignIdValues

        public boolean 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.
      • extractIdForFeature

        protected String extractIdForFeature​(Feature feature)
      • extractIdForAttribute

        protected String extractIdForAttribute​(Expression idExpression,
                                               Object sourceInstance)
        Description copied from class: AbstractMappingFeatureIterator
        Based on the set of xpath expression/id extracting expression, finds the ID for the attribute idExpression from the source complex attribute.
        Specified by:
        extractIdForAttribute in class AbstractMappingFeatureIterator
        Parameters:
        idExpression - the location path of the attribute to be created, for which to obtain the id by evaluating the corresponding org.geotools.filter.Expression from sourceInstance.
        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 , or null if there is no an id mapping for that attribute.
      • getValues

        protected Object getValues​(boolean isMultiValued,
                                   Expression expression,
                                   Object sourceFeatureInput)
      • 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 attribute
        clientPropsMappings - Client properties mappings
        value - Nested features
        xpath - Attribute xPath where the client properties are to be set
        targetNodeType - Target node type
      • setNextFeature

        protected List<Feature> setNextFeature​(String fId,
                                               List<Object> foreignIdValues)
                                        throws IOException
        Throws:
        IOException
      • skipNestedMapping

        public void skipNestedMapping​(AttributeMapping attMapping,
                                      List<Feature> sources)
                               throws IOException
        Throws:
        IOException
      • skip

        public List<Feature> skip()
                           throws IOException
        Throws:
        IOException
      • getSources

        protected List<Feature> getSources​(String id)
                                    throws IOException
        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

        protected String getNextFeatureId()
      • isByReference

        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.
        Parameters:
        clientPropsMappings - the client properties mappings
        isNested - true if we're dealing with chained/nested features
      • setListFilter

        public void setListFilter​(Filter filter)
      • getMappedSource

        public FeatureSource<? extends FeatureType,​? extends Feature> getMappedSource()
        For testing purposes.
        Returns:
        the feature source providing input features to be mapped to target features