1
16 package org.modelmapper.internal.converter;
17
18 import org.modelmapper.spi.ConditionalConverter;
19 import org.modelmapper.spi.MappingContext;
20
21
26 class EnumConverter implements ConditionalConverter<Object, Enum<?>> {
27 @SuppressWarnings({ "unchecked", "rawtypes" })
28 public Enum<?> convert(MappingContext<Object, Enum<?>> context) {
29 Object source = context.getSource();
30 if (source == null)
31 return null;
32
33 String name = source.getClass() == String.class ? (String) source : ((Enum<?>) source).name();
34
35 if (name != null)
36 try {
37 return Enum.valueOf((Class) context.getDestinationType(), name);
38 } catch (IllegalArgumentException ignore) {
39 }
40
41 return null;
42 }
43
44 public MatchResult match(Class<?> sourceType, Class<?> destinationType) {
45 return isEnum(destinationType) && (isEnum(sourceType) || sourceType == String.class) ? MatchResult.FULL
46 : MatchResult.NONE;
47 }
48
49 private boolean isEnum( Class<?> type ) {
50 return type.isAnonymousClass() ? isEnum( type.getSuperclass() ) : type.isEnum();
51 }
52 }
53