blob: 451e3de545d4ca5253601d913b21f3b7293b17c3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sis.internal.storage;
import java.util.Collection;
import java.util.OptionalLong;
import java.util.stream.Stream;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.util.ArgumentChecks;
// Branch-dependent imports
import org.apache.sis.feature.AbstractFeature;
import org.apache.sis.feature.DefaultFeatureType;
/**
* Set of features stored in memory. Features are specified at construction time.
* Metadata can be specified by overriding {@link #createMetadata(MetadataBuilder)}.
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
* @version 1.0
* @since 1.0
* @module
*/
public class MemoryFeatureSet extends AbstractFeatureSet {
/**
* The type specified at construction time and returned by {@link #getType()}.
*/
private final DefaultFeatureType type;
/**
* The features specified at construction time, potentially as a modifiable collection.
* For all features in this collection, {@link AbstractFeature#getType()} shall be {@link #type}.
*/
private final Collection<AbstractFeature> features;
/**
* Creates a new set of features stored in memory. It is caller responsibility to ensure that
* <code>{@linkplain AbstractFeature#getType()} == type</code> for all elements in the given collection
* (this is not verified).
*
* @param parent listeners of the parent resource, or {@code null} if none.
* @param type the type of all features in the given collection.
* @param features collection of stored features. This collection will not be copied.
*/
public MemoryFeatureSet(final StoreListeners parent,
final DefaultFeatureType type, final Collection<AbstractFeature> features)
{
super(parent);
ArgumentChecks.ensureNonNull("type", type);
ArgumentChecks.ensureNonNull("features", features);
this.type = type;
this.features = features;
}
/**
* Returns the type common to all feature instances in this set.
*
* @return a description of properties that are common to all features in this dataset.
*/
@Override
public DefaultFeatureType getType() {
return type;
}
/**
* Returns the number of features in this set.
*
* @return the number of features.
*/
@Override
protected OptionalLong getFeatureCount() {
return OptionalLong.of(features.size());
}
/**
* Returns a stream of all features contained in this dataset.
*
* @param parallel {@code true} for a parallel stream (if supported), or {@code false} for a sequential stream.
* @return all features contained in this dataset.
*/
@Override
public Stream<AbstractFeature> features(final boolean parallel) {
return parallel ? features.parallelStream() : features.stream();
}
}