Converter¶
The Converter
API is a way to convert a value of one type into a value of another type. The difference is that we supply a plugins so you can teach the system how to perform additional conversions over time.
The most common case of this is to parse a string into another type of value.
The Converter
interface looks like this:
public interface Converter {
Object convert( Object source, Class target ) throws Exception;
}
When you implement this you can either:
Handle it correctly (returning an object of the target class)``
Return null (if you could not handle it correctly)
Throw an exception (if you could not handle it correctly)
Converter for Enum
¶
Lets look at a real world example coming to us from the land of Java 5. Java 5 features a new type of construct called Enum
. This is not something GeoTools can usually deal with as a Java 1.4 project - but by supplying a converter you can teach GeoTools to get along with your Java 5 application.
Example Enum
:
public enum Choice {
THIS,
THAT;
}
Example Enum
converter:
class Choice2TextConverter {
Object convert( Object source, Class target ){
if( target != Choice.class ) return null;
return Choice.valueOf( (String) source ) );
}
}
In general the freedom to return null or throw an exception lets you program converters very quickly.
A common case that we see in many places in GeoTools is parsing a string into the type defined by an AttributeType
.
GeoTools 2.3 code (before converters were around):
FeatureType featureType = .... ;
AttributeType intType = featureType.getAttributeType( "intProperty" );
String string = "1234";
Integer integer = (Integer) intType.parse( string );
Using the Converters
utility class this becomes:
FeatureType featureType = .... ;
AttributeType intType = featureType.getAttributeType( "intProperty" );
String string = "1234";
Integer integer = Converters.convert( string, intType.getType() );
The Converters
are the technology behind our great support for the Filter API Expression:
Expression expr = ff.literal("#FF0000")
Color color = expr.evaluate( null, Color.class );