public interface IFeatureModel extends Model
See article for more details on how to use and how to implement this class.
A user of a model:
The model implementation has multiple responsibilities.
Feature
instances.
Feature
, the query()
method must also reflect that change. This can be guaranteed by making sure that model updates (internal updates + firing model change notifications) and calls to the query method are never executed simultaneously. Notifications must not be sent while the query()
method is executing.
Feature
models can add support for persisting model changes. See this article for more information.
In order to optimize feature loading, it is recommended to follow these rules when creating a model:
Feature
data types should have a GeometryDataAnnotation
.
Modifier and Type | Method and Description |
---|---|
void |
addObserver(IFeatureModelObserver modelObserver)
Adds an observer that allows to receive change events from this feature model.
|
FeatureModelMetadata |
getFeatureModelMetadata() |
FeatureModelPersistenceManager |
getPersistenceManager()
The
FeatureModelPersistenceManager is used to persist in-memory changes made through IFeatureModelUpdater . |
IFeatureModelUpdater |
getUpdater()
The
IFeatureModelUpdater is used to make changes to the model. |
void |
query(FeatureQuery query,
IFeatureQueryCallback callback)
Queries the model, and passes the result to the given callback.
|
void |
removeObserver(IFeatureModelObserver modelObserver)
Removes the given observer.
|
getModelMetadata, queryBounds
void query(@NotNull FeatureQuery query, @NotNull IFeatureQueryCallback callback)
The callback can return false to indicate that the query can stop. This method passes Feature
instances to the given callback. These instances contain a copy of the original data (structured according to the DataModel
of this model). The ownership of these features is passed to the caller of this method (through the callback). This means that the model is not allowed to modify/deleted these Feature
instances, once they are passed to the callback function.
This method is thread-safe, and can be called on any thread.
This method is synchronous and blocking. In other words, as soon as this function returns
Implementations of this method have the responsibilities described in the class documentation.
When implementing this method you may want to use the existing evaluation support which you can find in FeatureExpressionEvaluator
and FeatureExpressionEvaluatorFactory
.
Example to query the model for a Feature
with a specific id.
FeatureQuery query = FeatureQuery.newBuilder().featureIds(List.of(featureId)).build();
model.query(query, feature -> {
System.out.println(feature.getId());
return false;
});
query
- the querycallback
- a callback which can handle the result of the query operationvoid addObserver(@NotNull IFeatureModelObserver modelObserver) throws IllegalArgumentException
Adding the same observer twice is forbidden, and will cause an exception to be thrown.
modelObserver
- an observerIllegalArgumentException
- when the observer was already added.void removeObserver(@NotNull IFeatureModelObserver modelObserver) throws IllegalArgumentException
If the given observer was never added, an exception is thrown.
modelObserver
- an observerIllegalArgumentException
- when the observer is not known.@NotNull FeatureModelMetadata getFeatureModelMetadata()
@Nullable IFeatureModelUpdater getUpdater()
IFeatureModelUpdater
is used to make changes to the model.
Typically, IFeatureModel
implementations implement these changes as in-memory changes. FeatureModelPersistenceManager
can then be used to persist those changes (if persisting changes is supported). An IFeatureModel
can however choose to immediately persist any of these changes immediately, if persisting changes doesn't imply a large performance overhead for example. In that case a FeatureModelPersistenceManager
is not needed, and getPersistenceManager
must return null
.
null
must be returned.@Nullable FeatureModelPersistenceManager getPersistenceManager()
FeatureModelPersistenceManager
is used to persist in-memory changes made through IFeatureModelUpdater
.
If persisting changes is not supported by the model, or if it is not needed because IFeatureModelUpdater
already automatically persists its changes, this method must return null
.
FeatureModelPersistenceManager
that can be used for this model. When a model doesn't support (or doesn't need) saving functionality, null
must be returned.