public class SimpleFeatureBuilder extends FeatureBuilder<FeatureType,Feature>
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.
Constructor and Description |
---|
SimpleFeatureBuilder(SimpleFeatureType featureType) |
SimpleFeatureBuilder(SimpleFeatureType featureType,
FeatureFactory factory) |
Modifier and Type | Method and Description |
---|---|
void |
add(Object value)
Adds an attribute.
|
void |
addAll(List<Object> values)
Adds a list of attributes.
|
void |
addAll(Object... values)
Adds an array of attributes.
|
static SimpleFeature |
build(SimpleFeatureType type,
List<Object> values,
String id)
* Static method to build a new feature.
|
static SimpleFeature |
build(SimpleFeatureType type,
Object[] values,
String id)
Static method to build a new feature.
|
SimpleFeature |
buildFeature(String id)
Builds the feature.
|
SimpleFeature |
buildFeature(String id,
Object... values)
Quickly builds the feature using the specified values and id
|
static 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.
|
SimpleFeatureBuilder |
featureUserData(Object key,
Object value)
Sets a feature wide use data key/value pair.
|
SimpleFeatureBuilder |
featureUserData(SimpleFeature source)
Sets the feature wide user data copying them from the template feature provided
|
SimpleFeatureType |
getFeatureType()
Returns the simple feature type used by this builder as a feature template
|
void |
init(SimpleFeature feature)
Initialize the builder with the provided feature.
|
boolean |
isValidating() |
void |
reset() |
static SimpleFeature |
retype(SimpleFeature feature,
SimpleFeatureBuilder builder)
Copies an existing feature, retyping it in the process.
|
static SimpleFeature |
retype(SimpleFeature feature,
SimpleFeatureType featureType)
Copies an existing feature, retyping it in the process.
|
void |
set(int index,
Object value)
Adds an attribute value by index. *
This method can be used to add attribute values out of order.
|
void |
set(Name name,
Object value)
Adds an attribute value by name.
|
void |
set(String name,
Object value)
Adds an attribute value by name.
|
SimpleFeatureBuilder |
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 ones
|
SimpleFeatureBuilder |
userData(Object key,
Object value)
Adds some user data to the next attribute added to the feature.
|
convert, createDefaultFeatureId, createDefaultFeatureIdentifier
public SimpleFeatureBuilder(SimpleFeatureType featureType)
public SimpleFeatureBuilder(SimpleFeatureType featureType, FeatureFactory factory)
public void reset()
public SimpleFeatureType getFeatureType()
getFeatureType
in class FeatureBuilder<FeatureType,Feature>
public void init(SimpleFeature feature)
This method adds all the attributes from the provided feature. It is useful when copying a feature.
public void add(Object value)
This method should be called repeatedly for the number of attributes as specified by the type of the feature.
public void addAll(Object... values)
public void set(Name name, Object value)
This method can be used to add attribute values out of order.
name
- The name of the attribute.value
- The value of the attribute.IllegalArgumentException
- If no such attribute with the specified name exists.public void set(String name, Object value)
This method can be used to add attribute values out of order.
name
- The name of the attribute.value
- The value of the attribute.IllegalArgumentException
- If no such attribute with the specified name exists.public void set(int index, Object value)
This method can be used to add attribute values out of order.
index
- The index of the attribute.value
- The value of the attribute.public SimpleFeature buildFeature(String id)
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.
buildFeature
in class FeatureBuilder<FeatureType,Feature>
id
- The id of the feature, or null
.public SimpleFeature buildFeature(String id, Object... values)
public static SimpleFeature build(SimpleFeatureType type, Object[] values, String id)
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.
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 youpublic static SimpleFeature build(SimpleFeatureType type, List<Object> values, String id)
If multiple features need to be created, this method should not be used and instead an instance should be instantiated directly.
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 youpublic static SimpleFeature copy(SimpleFeature original)
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.
public static SimpleFeature deep(SimpleFeature original)
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.
original
- Contentpublic static SimpleFeature template(SimpleFeatureType featureType, String featureId)
public static SimpleFeature retype(SimpleFeature feature, SimpleFeatureType featureType)
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
.
feature
- The original feature.featureType
- The target feature type.public static SimpleFeature retype(SimpleFeature feature, SimpleFeatureBuilder builder)
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
.
feature
- The original feature.builder
- A builder for the target feature typepublic SimpleFeatureBuilder userData(Object key, Object value)
This value is reset when the next attribute is added.
key
- The key of the user datavalue
- The value of the user data.public SimpleFeatureBuilder setUserData(int index, Object key, Object value)
index
- The index of the attribute.key
- The key of the user data.value
- The value of the user data.public SimpleFeatureBuilder featureUserData(SimpleFeature source)
public SimpleFeatureBuilder featureUserData(Object key, Object value)
public boolean isValidating()
public void setValidating(boolean validating)
Copyright © 1996–2022 Geotools. All rights reserved.