package org.mongodb.morphia.converters;
import org.mongodb.morphia.mapping.MappedField;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
public class EnumSetConverter extends TypeConverter implements SimpleValueConverter {
private final EnumConverter ec = new EnumConverter();
public EnumSetConverter() {
super(EnumSet.class);
}
@Override
@SuppressWarnings("unchecked")
public Object decode(final Class targetClass, final Object fromDBObject, final MappedField optionalExtraInfo) {
if (fromDBObject == null) {
return null;
}
final Class enumType = optionalExtraInfo.getSubClass();
final List l = (List) fromDBObject;
if (l.isEmpty()) {
return EnumSet.noneOf(enumType);
}
final List enums = new ArrayList();
for (final Object object : l) {
enums.add(ec.decode(enumType, object));
}
return EnumSet.copyOf(enums);
}
@Override
@SuppressWarnings("unchecked")
public Object encode(final Object value, final MappedField optionalExtraInfo) {
if (value == null) {
return null;
}
final List values = new ArrayList();
final EnumSet s = (EnumSet) value;
final Object[] array = s.toArray();
for (final Object anArray : array) {
values.add(ec.encode(anArray));
}
return values;
}
}