View Javadoc

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   * @author Sebastian Prehn <sebastian.prehn@planetswebdesign.de>
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() { // required to make it proxyable
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  }