Search in sources :

Example 1 with Expression

use of org.apache.sis.filter.Expression in project sis by apache.

the class FeatureSubset method features.

/**
 * Returns a stream of all features contained in this dataset.
 */
@Override
public Stream<AbstractFeature> features(final boolean parallel) throws DataStoreException {
    Stream<AbstractFeature> stream = source.features(parallel);
    /*
         * Apply filter.
         */
    final Filter<? super AbstractFeature> selection = query.getSelection();
    if (selection != null && !selection.equals(Filter.include())) {
        stream = stream.filter(selection);
    }
    /*
         * Apply sorting.
         */
    final SortBy<AbstractFeature> sortBy = query.getSortBy();
    if (sortBy != null) {
        stream = stream.sorted(sortBy);
    }
    /*
         * Apply offset.
         */
    final long offset = query.getOffset();
    if (offset > 0) {
        stream = stream.skip(offset);
    }
    /*
         * Apply limit.
         */
    final OptionalLong limit = query.getLimit();
    if (limit.isPresent()) {
        stream = stream.limit(limit.getAsLong());
    }
    /*
         * Transform feature instances.
         * Note: "projection" here is in relational database sense, not map projection.
         */
    final FeatureQuery.NamedExpression[] projection = query.getProjection();
    if (projection != null) {
        @SuppressWarnings({ "unchecked", "rawtypes" }) final Expression<? super AbstractFeature, ?>[] expressions = new Expression[projection.length];
        for (int i = 0; i < expressions.length; i++) {
            expressions[i] = projection[i].expression;
        }
        final DefaultFeatureType type = getType();
        final String[] names = FeatureUtilities.getNames(type.getProperties(false));
        stream = stream.map(t -> {
            final AbstractFeature f = type.newInstance();
            for (int i = 0; i < expressions.length; i++) {
                f.setPropertyValue(names[i], expressions[i].apply(t));
            }
            return f;
        });
    }
    return stream;
}
Also used : OptionalLong(java.util.OptionalLong) DefaultFeatureType(org.apache.sis.feature.DefaultFeatureType) Stream(java.util.stream.Stream) AbstractFeatureSet(org.apache.sis.internal.storage.AbstractFeatureSet) Expression(org.apache.sis.filter.Expression) Resources(org.apache.sis.internal.storage.Resources) FeatureUtilities(org.apache.sis.internal.feature.FeatureUtilities) StoreListeners(org.apache.sis.storage.event.StoreListeners) SortBy(org.apache.sis.internal.geoapi.filter.SortBy) AbstractFeature(org.apache.sis.feature.AbstractFeature) Filter(org.apache.sis.filter.Filter) AbstractFeature(org.apache.sis.feature.AbstractFeature) Expression(org.apache.sis.filter.Expression) DefaultFeatureType(org.apache.sis.feature.DefaultFeatureType) OptionalLong(java.util.OptionalLong)

Aggregations

OptionalLong (java.util.OptionalLong)1 Stream (java.util.stream.Stream)1 AbstractFeature (org.apache.sis.feature.AbstractFeature)1 DefaultFeatureType (org.apache.sis.feature.DefaultFeatureType)1 Expression (org.apache.sis.filter.Expression)1 Filter (org.apache.sis.filter.Filter)1 FeatureUtilities (org.apache.sis.internal.feature.FeatureUtilities)1 SortBy (org.apache.sis.internal.geoapi.filter.SortBy)1 AbstractFeatureSet (org.apache.sis.internal.storage.AbstractFeatureSet)1 Resources (org.apache.sis.internal.storage.Resources)1 StoreListeners (org.apache.sis.storage.event.StoreListeners)1