Class SimpleFeatureBuilder
Simple Usage:
//type of features we would like to build ( assume schema = (geom:Point,name:String) )
SimpleFeatureType featureType = ...
//create the builder
SimpleFeatureBuilder builder = new SimpleFeatureBuilder();
//set the type of created features
builder.setType( featureType );
//add the attributes
builder.add( new Point( 0 , 0 ) );
builder.add( "theName" );
//build the feature
SimpleFeature feature = builder.buildFeature( "fid" );
This builder builds a feature by maintaining state. Each call to add(Object)
creates a new attribute for
the feature and stores it locally. When using the add method to add attributes to the feature, values added must be
added in the same order as the attributes as defined by the feature type. The methods set(String, Object)
and set(int, Object)
are used to add attributes out of order.
Each time the builder builds a feature with a call to buildFeature(String)
the internal state is reset.
This builder can be used to copy features as well. The following code sample demonstrates:
//original feature
SimpleFeature original = ...;
//create and initialize the builder
SimpleFeatureBuilder builder = new SimpleFeatureBuilder();
builder.init(original);
//create the new feature
SimpleFeature copy = builder.buildFeature( original.getID() );
The builder also provides a number of static "short-hand" methods which can be used when its not ideal to
instantiate a new builder, thought this will trigger some extra object allocations. In time critical code sections
it's better to instantiate the builder once and use it to build all the required features.
SimpleFeatureType type = ..;
Object[] values = ...;
//build a new feature
SimpleFeature feature = SimpleFeatureBuilder.build( type, values, "fid" );
...
SimpleFeature original = ...;
//copy the feature
SimpleFeature feature = SimpleFeatureBuilder.copy( original );
This class is not thread safe nor should instances be shared across multiple threads.
- Author:
- Justin Deoliveira, Jody Garnett
-
Constructor Summary
ConstructorsConstructorDescriptionSimpleFeatureBuilder
(SimpleFeatureType featureType) SimpleFeatureBuilder
(SimpleFeatureType featureType, FeatureFactory factory) -
Method Summary
Modifier and TypeMethodDescriptionvoid
Adds an attribute.void
Adds an array of attributes, in order provided.void
Adds a list of attributes, in order provided.static SimpleFeature
build
(SimpleFeatureType type, Object[] values, String id) Static method to build a new feature.static SimpleFeature
build
(SimpleFeatureType type, List<Object> values, String id) Static method to build a new feature.buildFeature
(String id) Builds the feature.buildFeature
(String id, Object... values) Quickly builds the feature using the specified values and idstatic SimpleFeature
copy
(SimpleFeature original) Copy an existing feature (the values are reused so be careful with mutable values).static SimpleFeature
deep
(SimpleFeature original) Perform a "deep copy" an existing feature resuling in a duplicate of any geometry attributes.featureUserData
(Object key, Object value) Sets a feature wide use data key/value pair.featureUserData
(SimpleFeature source) Sets the feature wide user data copying them from the template feature providedReturns the simple feature type used by this builder as a feature template.void
init
(SimpleFeature feature) Initialize the builder with the provided feature.boolean
True if values are validated when added to builder.void
reset()
Reset the builder, for generating a new feature.static SimpleFeature
retype
(SimpleFeature feature, SimpleFeatureType featureType) Copies an existing feature, retyping it in the process.static SimpleFeature
retype
(SimpleFeature feature, SimpleFeatureBuilder builder) Copies an existing feature, retyping it in the process.void
Adds an attribute value by index.void
Adds an attribute value by name.void
Adds an attribute value by name.setUserData
(int index, Object key, Object value) Set user data for a specific attribute.void
setValidating
(boolean validating) static SimpleFeature
template
(SimpleFeatureType featureType, String featureId) Builds a new feature whose attribute values are the default onesAdds some user data to the next attribute added to the feature.Methods inherited from class FeatureBuilder
convert, createDefaultFeatureId, createDefaultFeatureIdentifier
-
Constructor Details
-
SimpleFeatureBuilder
-
SimpleFeatureBuilder
-
-
Method Details
-
reset
public void reset()Reset the builder, for generating a new feature. -
getFeatureType
Returns the simple feature type used by this builder as a feature template.- Overrides:
getFeatureType
in classFeatureBuilder<FeatureType,
Feature>
-
init
Initialize the builder with the provided feature.This method adds all the attributes from the provided feature (along with user data if provided). It is useful when copying a feature.
- Parameters:
feature
- Feature to copy
-
add
Adds an attribute.This method should be called repeatedly for the number of attributes as specified by the type of the feature.
-
addAll
Adds a list of attributes, in order provided. -
addAll
Adds an array of attributes, in order provided. -
set
Adds an attribute value by name.This method can be used to add attribute values out of order.
- Parameters:
name
- The name of the attribute.value
- The value of the attribute.- Throws:
IllegalArgumentException
- If no such attribute with the specified name exists.
-
set
Adds an attribute value by name.This method can be used to add attribute values out of order.
- Parameters:
name
- The name of the attribute.value
- The value of the attribute.- Throws:
IllegalArgumentException
- If no such attribute with the specified name exists.
-
set
Adds an attribute value by index.This method can be used to add attribute values out of order.
The provided value is converted to an object of the required type if required.
If
isValidating()
enabled the resulting object is validated against, any restrictions imposed by the attribute descriptor.- Parameters:
index
- The index of the attribute.value
- The value of the attribute.
-
buildFeature
Builds the feature.The specified id may be
null
. In this case an id will be generated internally by the builder.After this method returns, all internal builder state is reset.
- Specified by:
buildFeature
in classFeatureBuilder<FeatureType,
Feature> - Parameters:
id
- The id of the feature, ornull
.- Returns:
- The new feature.
-
buildFeature
Quickly builds the feature using the specified values and id -
build
Static method to build a new feature.If multiple features need to be created, this method should not be used and instead an instance should be instantiated directly.
This method is a short-hand convenience which creates a builder instance internally and adds all the specified attributes.
- Parameters:
type
- SimpleFeatureType defining the structure for the created featurevalues
- Attribute values, must be in the order defined by SimpleFeatureTypeid
- FeatureID for the generated feature, use null to allow one to be supplied for you
-
build
Static method to build a new feature.Simple feature is very forgiving willing to convert values, and supply default values for any missing values.
If you have an array of values that exactly match your SimpleFeatureType it is faster to instantiate directly using
FeatureFactory.createSimpleFeautre(Object[], AttributeDescriptor, String)
.- Parameters:
type
- SimpleFeatureType defining the structure for the created featurevalues
- Attribute values, must be in the order defined by SimpleFeatureTypeid
- FeatureID for the generated feature, use null to allow one to be supplied for you
-
copy
Copy an existing feature (the values are reused so be careful with mutable values).If multiple features need to be copied, this method should not be used and instead an instance should be instantiated directly.
This method is a short-hand convenience which creates a builder instance and initializes it with the attributes from the specified feature.
-
deep
Perform a "deep copy" an existing feature resuling in a duplicate of any geometry attributes.This method is scary, expensive and will result in a deep copy of Geometry which may take a significant amount of memory/time to perform.
- Parameters:
original
- Content- Returns:
- copy
-
template
Builds a new feature whose attribute values are the default ones -
retype
Copies an existing feature, retyping it in the process.Be warned, this method will create its own SimpleFeatureBuilder, which will trigger a scan of the SPI looking for the current default feature factory, which is expensive and has scalability issues.
If you need good performance consider using
retype(SimpleFeature, SimpleFeatureBuilder)
instead.If the feature type contains attributes in which the original feature does not have a value for, the value in the resulting feature is set to
null
.- Parameters:
feature
- The original feature.featureType
- The target feature type.- Returns:
- The copied feature, with a new type.
-
retype
Copies an existing feature, retyping it in the process.If the feature type contains attributes in which the original feature does not have a value for, the value in the resulting feature is set to
null
.- Parameters:
feature
- The original feature.builder
- A builder for the target feature type- Returns:
- The copied feature, with a new type.
- Since:
- 2.5.3
-
userData
Adds some user data to the next attribute added to the feature.This value is reset when the next attribute is added.
- Parameters:
key
- The key of the user datavalue
- The value of the user data.
-
setUserData
Set user data for a specific attribute.- Parameters:
index
- The index of the attribute.key
- The key of the user data.value
- The value of the user data.
-
featureUserData
Sets the feature wide user data copying them from the template feature provided -
featureUserData
Sets a feature wide use data key/value pair.The user data map is reset when the feature is built.
-
isValidating
public boolean isValidating()True if values are validated when added to builder.- Returns:
-
setValidating
public void setValidating(boolean validating)
-