001    package org.trails.validation;
002    
003    import org.apache.tapestry.valid.FieldTracking;
004    import org.apache.tapestry.valid.RenderString;
005    import org.hibernate.validator.InvalidStateException;
006    import org.hibernate.validator.InvalidValue;
007    import org.trails.descriptor.IClassDescriptor;
008    import org.trails.descriptor.IPropertyDescriptor;
009    
010    public class HibernateValidationDelegate extends TrailsValidationDelegate
011    {
012    
013            public void record(IClassDescriptor descriptor, InvalidStateException invalidStateException)
014            {
015                    for (InvalidValue invalidValue : invalidStateException.getInvalidValues())
016                    {
017    
018                            IPropertyDescriptor propertyDescriptor = descriptor.getPropertyDescriptor(invalidValue.getPropertyName());
019                            FieldTracking fieldTracking = null;
020                            String message = null;
021                            if (propertyDescriptor != null)
022                            {
023                                    fieldTracking = (FieldTracking) getFieldTracking(propertyDescriptor.getDisplayName());
024                                    message = propertyDescriptor.getDisplayName() + " " + invalidValue.getMessage();
025                            } else
026                            {
027                                    // Making sure that this error is an "unassociated (with any field) error".
028                                    setFormComponent(null);
029    
030                                    fieldTracking = findCurrentTracking();
031                                    message = invalidValue.getMessage();
032                            }
033    
034                            fieldTracking.setErrorRenderer(new RenderString(message));
035                    }
036            }
037    
038    }