package org.mongodb.morphia.converters;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.mongodb.morphia.geo.GeometryConverter;
import org.mongodb.morphia.geo.GeometryShapeConverter;
import org.mongodb.morphia.mapping.MappedField;
import org.mongodb.morphia.mapping.Mapper;
Default encoders
Author: Uwe Schaefer, (us@thomas-daily.de), scotthernandez
/**
* Default encoders
*
* @author Uwe Schaefer, (us@thomas-daily.de)
* @author scotthernandez
*/
public class DefaultConverters extends Converters {
public static final boolean JAVA_8;
private final IdentityConverter identityConverter;
private final SerializedObjectConverter serializedConverter;
static {
boolean found;
try {
Class.forName("java.time.LocalDateTime");
found = true;
} catch (ClassNotFoundException e) {
found = false;
}
JAVA_8 = found;
}
Creates a bundle with a particular Mapper.
Params: - mapper – the Mapper to use
/**
* Creates a bundle with a particular Mapper.
*
* @param mapper the Mapper to use
*/
public DefaultConverters(final Mapper mapper) {
super(mapper);
addConverter(new IdentityConverter(DBObject.class, BasicDBObject.class));
addConverter(new EnumSetConverter());
addConverter(new EnumConverter());
addConverter(new StringConverter());
addConverter(new CharacterConverter());
addConverter(new ByteConverter());
addConverter(new BooleanConverter());
addConverter(new DoubleConverter());
addConverter(new FloatConverter());
addConverter(new LongConverter());
addConverter(new LocaleConverter());
addConverter(new ShortConverter());
addConverter(new IntegerConverter());
addConverter(new CharArrayConverter());
addConverter(new DateConverter());
addConverter(new URIConverter());
addConverter(new KeyConverter());
addConverter(new MapOfValuesConverter());
addConverter(new IterableConverter());
addConverter(new ClassConverter());
addConverter(new ObjectIdConverter());
addConverter(new TimestampConverter());
addConverter(new BigDecimalConverter());
// Converters for Geo entities
addConverter(new GeometryShapeConverter.PointConverter());
addConverter(new GeometryShapeConverter.LineStringConverter());
addConverter(new GeometryShapeConverter.MultiPointConverter());
addConverter(new GeometryShapeConverter.MultiLineStringConverter());
addConverter(new GeometryShapeConverter.PolygonConverter());
addConverter(new GeometryShapeConverter.MultiPolygonConverter());
addConverter(new GeometryConverter());
if (JAVA_8) {
addConverter(LocalTimeConverter.class);
addConverter(LocalDateTimeConverter.class);
addConverter(LocalDateConverter.class);
addConverter(InstantConverter.class);
}
//generic converter that will just pass things through.
identityConverter = new IdentityConverter();
serializedConverter = new SerializedObjectConverter();
}
@Override
protected TypeConverter getEncoder(final Class c) {
TypeConverter encoder = super.getEncoder(c);
if (encoder == null && identityConverter.canHandle(c)) {
encoder = identityConverter;
}
return encoder;
}
@Override
protected TypeConverter getEncoder(final Object val, final MappedField mf) {
if (serializedConverter.canHandle(mf)) {
return serializedConverter;
}
TypeConverter encoder = super.getEncoder(val, mf);
if (encoder == null && (identityConverter.canHandle(mf)
|| (val != null && identityConverter.isSupported(val.getClass(), mf)))) {
encoder = identityConverter;
}
return encoder;
}
}