1 package org.jcr_blog.jcrmapping.converter.basic;
2
3 import com.google.common.collect.BiMap;
4 import com.google.common.collect.EnumHashBiMap;
5 import javax.jcr.RepositoryException;
6 import javax.jcr.Value;
7 import javax.jcr.ValueFactory;
8 import org.jcr_blog.jcrmapping.NodeConverterException;
9 import org.jcr_blog.jcrmapping.converter.Converter;
10
11
12
13
14
15 public abstract class AbstractEnumConverter<E extends Enum<E>> implements Converter {
16
17 private Class<E> enumClazz;
18 private BiMap<E, String > mapping;
19
20 public AbstractEnumConverter() {
21 }
22
23 protected AbstractEnumConverter(Class<E> enumClazz) {
24 this.enumClazz = enumClazz;
25 mapping = EnumHashBiMap.create(enumClazz);
26 provideMapping(mapping);
27 }
28 protected abstract void provideMapping(BiMap<E, String > mapping);
29
30 @Override
31 public boolean isApplicableObjectToValue(Object object) {
32 return enumClazz.isAssignableFrom(object.getClass());
33 }
34
35 @Override
36 public Value toValue(Object object, ValueFactory valueFactory) throws NodeConverterException {
37 return valueFactory.createValue(mapping.get(object));
38 }
39
40 @Override
41 public boolean isApplicableValueToObject(Class<?> clazz) {
42 return clazz.isAssignableFrom(this.enumClazz);
43 }
44
45 @Override
46 public Object toObject(Value value) throws NodeConverterException, RepositoryException {
47 return mapping.inverse().get(value.getString());
48 }
49
50
51
52 }