package org.mongodb.morphia.converters;
import org.junit.Assert;
import org.junit.Test;
import org.mongodb.morphia.TestBase;
import org.mongodb.morphia.annotations.Property;
import org.mongodb.morphia.mapping.MappedField;
import org.mongodb.morphia.testutil.TestEntity;
public class CustomConverterDefaultTest extends TestBase {
@Test
public void testConversion() throws Exception {
final FooConverter fc = new FooConverter();
getMorphia().getMapper().getConverters().addConverter(fc);
getMorphia().map(E.class);
E e = new E();
e.foo = new Foo("test");
getDs().save(e);
Assert.assertTrue(fc.didConversion());
e = getDs().find(E.class).get();
Assert.assertNotNull(e.foo);
Assert.assertEquals("test", e.foo.string);
}
@Test
public void testRemoveConverter() {
Converters converters = getMorphia().getMapper().getConverters();
try {
Assert.assertTrue(converters.isRegistered(DoubleConverter.class));
converters.removeConverter(new DoubleConverter());
Assert.assertFalse(converters.isRegistered(DoubleConverter.class));
} finally {
if (!converters.isRegistered(DoubleConverter.class)) {
converters.addConverter(DoubleConverter.class);
}
}
}
public static class E extends TestEntity {
@Property
private Foo foo;
}
// unknown type to convert
public static class Foo {
private final String string;
public Foo(final String string) {
this.string = string;
}
@Override
public String toString() {
return string;
}
}
public static class FooConverter extends TypeConverter implements SimpleValueConverter {
private boolean done;
public FooConverter() {
super(Foo.class);
}
@Override
public Object decode(final Class targetClass, final Object fromDBObject, final MappedField optionalExtraInfo) {
return new Foo((String) fromDBObject);
}
@Override
public Object encode(final Object value, final MappedField optionalExtraInfo) {
done = true;
return value.toString();
}
public boolean didConversion() {
return done;
}
}
}