Class JoinFeatureSet

All Implemented Interfaces:
DataSet, FeatureSet, Resource

public class JoinFeatureSet extends AggregatedFeatureSet
Features containing association to features from two different sources, joined by a SQL-like JOIN condition. Each feature in this FeatureSet contains two or three properties:
  • An optional identifier created from the identifiers of the left and right features.
  • Zero or one association to a "left" feature.
  • Zero or one association to a "right" feature.
The left and right features appear together in an JoinFeatureSet instance when a value from leftProperty in the first feature is equal to a value from rightProperty in the second feature.

Implementation note

If iterations in one feature set is cheaper than iterations in the other feature set, then the "costly" or larger FeatureSet should be on the left side and the "cheap" FeatureSet should be on the right side.

This implementation is read-only.

Since:
1.0
Version:
1.1
  • Field Details

    • type

      private final DefaultFeatureType type
      The type of features included in this set. Contains two associations as described in class javadoc.
    • left

      public final FeatureSet left
      The first source of features.
    • leftName

      private final String leftName
      Name of the associations to the left features. This may be the name of the left feature type, but not necessarily.
    • rightName

      private final String rightName
      Name of the associations to the right features. This may be the name of the right feature type, but not necessarily.
    • swapSides

      private final boolean swapSides
      true if the "main" side is the right side instead of the left side. See JoinFeatureSet.Iterator for a definition of "main side".
    • isOuterJoin

      private final boolean isOuterJoin
      Whether to include all "main" feature instances even if there is no match in the other side. This is true for outer joins and false for inner joins.
    • condition

      public final BinaryComparisonOperator<? super AbstractFeature> condition
      The join condition in the form property from left feature = property from right feature. This condition specifies also if the comparison is case sensitive and how to compare multi-values.
    • factory

      private final DefaultFilterFactory<AbstractFeature,?,?> factory
      The factory to use for creating Query expressions for retrieving subsets of feature sets.
  • Constructor Details

    • JoinFeatureSet

      public JoinFeatureSet(StoreListeners parent, FeatureSet left, String leftAlias, FeatureSet right, String rightAlias, JoinFeatureSet.Type joinType, BinaryComparisonOperator<? super AbstractFeature> condition, Map<String,?> featureInfo) throws DataStoreException
      Creates a new feature set joining the two given sets. The featureInfo map defines the name, description or other information for the FeatureType created by this method. It can contain all the properties described in DefaultFeatureType plus the following ones:
      • "identifierDelimiter" — string to insert between left and right identifiers in the identifiers generated by the join operation. If this property is not specified, then no identifier will be generated.
      • "identifierPrefix" — string to insert at the beginning of join identifiers (optional).
      • "identifierSuffix" — string to insert at the end of join identifiers (optional).
      Parameters:
      parent - listeners of the parent resource, or null if none.
      left - the first source of features. This is often (but not necessarily) the largest set.
      leftAlias - name of the associations to the left features, or null for a default name.
      right - the second source of features. Should be the set in which iterations are cheapest.
      rightAlias - name of the associations to the right features, or null for a default name.
      joinType - whether values on both sides are required (inner join), or only one side (outer join).
      condition - join condition as property from left feature = property from right feature.
      featureInfo - information about the FeatureType of this feature set.
      Throws:
      DataStoreException - if an error occurred while creating the feature set.
  • Method Details

    • name

      private static Map<String,?> name(Object name)
      Creates a minimal properties map for feature type or property type constructors. This minimalist map contain only the mandatory entry, which is the name.
    • dependencies

      final List<FeatureSet> dependencies()
      Returns the two feature sets used by this JoinFeatureSet. The "main" dependency is at index 0 and the other dependency at index 1.
      Specified by:
      dependencies in class AggregatedFeatureSet
      Returns:
      the dependencies in a list of size 2 with the "main" dependency first.
    • getJoinType

      public JoinFeatureSet.Type getJoinType()
      Specifies whether values on both sides are required (inner join), or only one side (outer join).
      Returns:
      whether values on both sides are required (inner join), or only one side (outer join).
    • getType

      public DefaultFeatureType getType()
      Returns a description of properties that are common to all features in this dataset. This type may contain one identifier and always contains two associations, to the left and right set of features respectively.
      Returns:
      a description of properties that are common to all features in this dataset.
    • features

      public Stream<AbstractFeature> features(boolean parallel) throws DataStoreException
      Returns a stream of all features contained in this dataset.
      Parameters:
      parallel - true for a parallel stream (if supported), or false for a sequential stream.
      Returns:
      all features contained in this dataset.
      Throws:
      DataStoreException - if an error occurred while creating the stream.
    • join

      private AbstractFeature join(AbstractFeature main, AbstractFeature filtered)
      Creates a new features containing an association to the two given features. The main feature cannot be null (this is not verified).