Coverage Report - org.trails.validation.HibernateClassValidatorFactory
 
Classes in this File Line Coverage Branch Coverage Complexity
HibernateClassValidatorFactory
67% 
100% 
0
 
 1  
 /*
 2  
  * Created on 29/11/2005
 3  
  *
 4  
  */
 5  
 package org.trails.validation;
 6  
 
 7  
 import java.util.Enumeration;
 8  
 import java.util.HashMap;
 9  
 import java.util.Locale;
 10  
 import java.util.Map;
 11  
 import java.util.ResourceBundle;
 12  
 
 13  
 import org.hibernate.validator.ClassValidator;
 14  
 import org.hibernate.validator.InvalidStateException;
 15  
 import org.hibernate.validator.InvalidValue;
 16  
 import org.trails.component.Utils;
 17  
 import org.trails.servlet.TrailsApplicationServlet;
 18  
 
 19  1
 public class HibernateClassValidatorFactory
 20  
 {
 21  
 
 22  1
         private static Map classValidator = new HashMap();
 23  
 
 24  
         /**
 25  
          * This inner class doesn't return exceptions when some key is searched in
 26  
          * the bundle. This is nice so we don't have exceptions thrown in the screen
 27  
          * by hibernate ClassValidator. Instead, we will have a
 28  
          * [TRAILS][KEY-IN-UPPER] string returned.
 29  
          *
 30  
          * @author Eduardo Fernandes Piva (eduardo@gwe.com.br)
 31  
          */
 32  
         private class MyBundle extends ResourceBundle
 33  
         {
 34  
 
 35  
                 private ResourceBundle parentBundle;
 36  
 
 37  0
                 public MyBundle(ResourceBundle bundle)
 38  
                 {
 39  0
                         this.parentBundle = bundle;
 40  0
                 }
 41  
 
 42  
                 @Override
 43  
                 protected Object handleGetObject(String key)
 44  
                 {
 45  
                         try
 46  
                         {
 47  0
                                 return parentBundle.getObject(key);
 48  0
                         } catch (Exception e)
 49  
                         {
 50  0
                                 return "[TRAILS][" + key.toUpperCase() + "]";
 51  
                         }
 52  
                 }
 53  
 
 54  
                 @Override
 55  
                 public Enumeration<String> getKeys()
 56  
                 {
 57  0
                         return parentBundle.getKeys();
 58  
                 }
 59  
 
 60  
         }
 61  
 
 62  1
         private static final HibernateClassValidatorFactory singleton = new HibernateClassValidatorFactory();
 63  
 
 64  1
         private HibernateClassValidatorFactory()
 65  
         {
 66  1
         }
 67  
 
 68  
         public static HibernateClassValidatorFactory getSingleton()
 69  
         {
 70  34
                 return singleton;
 71  
         }
 72  
 
 73  
         public void validateEntity(Object entity)
 74  
         {
 75  34
                 Locale locale = TrailsApplicationServlet.getCurrentLocale();
 76  
 
 77  34
                 String key = entity.getClass().toString() + "locale:" + locale;
 78  34
                 ClassValidator validator = (ClassValidator) classValidator.get(key);
 79  34
                 if (validator == null)
 80  
                 {
 81  7
                         validator = initializeCache(key, entity, locale);
 82  
                 }
 83  
 
 84  34
                 InvalidValue[] invalidValues = validator.getInvalidValues(entity);
 85  34
                 if (invalidValues.length > 0)
 86  
                 {
 87  2
                         throw new InvalidStateException(invalidValues);
 88  
                 }
 89  
 
 90  32
         }
 91  
 
 92  
         private ClassValidator initializeCache(String key, Object entity, Locale locale)
 93  
         {
 94  7
                 Class entityClass = Utils.checkForCGLIB(entity.getClass());
 95  
                 ClassValidator validator;
 96  7
                 if (locale == null)
 97  
                 {
 98  7
                         validator = new ClassValidator(entityClass);
 99  
                 } else
 100  
                 {
 101  0
                         ResourceBundle bundle = ResourceBundle.getBundle("messages", locale);
 102  0
                         ResourceBundle myBundle = new MyBundle(bundle);
 103  0
                         validator = new ClassValidator(entityClass, myBundle);
 104  
                 }
 105  
 
 106  7
                 classValidator.put(key, validator);
 107  7
                 return validator;
 108  
         }
 109  
 
 110  
 
 111  
 }