package org.mongodb.morphia.ext; import com.mongodb.DBObject; import org.bson.types.ObjectId; import org.junit.Assert; import org.junit.Test; import org.mongodb.morphia.TestBase; import org.mongodb.morphia.annotations.Converters; import org.mongodb.morphia.annotations.Id; import org.mongodb.morphia.converters.SimpleValueConverter; import org.mongodb.morphia.converters.TypeConverter; import org.mongodb.morphia.mapping.MappedField; /** * Example converter which stores the enum value instead of string (name) * * @author scotthernandez */ public class EnumValueConverterTest extends TestBase { @Test public void testEnum() { final EnumEntity ee = new EnumEntity(); getDs().save(ee); final DBObject dbObj = getDs().getCollection(EnumEntity.class).findOne(); Assert.assertEquals(1, dbObj.get("val")); } private enum AEnum { One, Two } private static class AEnumConverter extends TypeConverter implements SimpleValueConverter { public AEnumConverter() { super(AEnum.class); } @Override public Object decode(final Class targetClass, final Object fromDBObject, final MappedField optionalExtraInfo) { if (fromDBObject == null) { return null; } return AEnum.values()[(Integer) fromDBObject]; } @Override public Object encode(final Object value, final MappedField optionalExtraInfo) { if (value == null) { return null; } return ((Enum) value).ordinal(); } } @Converters(AEnumConverter.class) private static class EnumEntity { @Id private ObjectId id = new ObjectId(); private AEnum val = AEnum.Two; } }