On 8 févr. 2011, at 09:20, Gunnar Morling wrote:
> 
> 2011/2/7 Emmanuel Bernard <emman...@hibernate.org>
> Hi,
> 
> On 6 févr. 2011, at 20:57, Gunnar Morling wrote:
> 
>> 
>> one other issue we might/should deliver for Beta2 is 
>> http://opensource.atlassian.com/projects/hibernate/browse/HV-371 ("Support 
>> method-level constraints in meta-data API"), at least API-wise. I pushed a 
>> first draft to 
>> https://github.com/gunnarmorling/hibernate-validator/tree/HV-371 and would 
>> be happy on your feedback.
>> 
>> With some exceptions this is pretty similar to what is suggested in Appendix 
>> C. As we can't alter the BeanDescriptor type, I created a new type 
>> TypeDescriptor (I think the name is better anyways, as constraints are no 
>> longer restricted to bean-style types with the advent of method validation). 
>> This type resembles BeanDescriptor (it doesn't inherit for the naming reason 
>> but I would let me convince if you think it should) and is returned by 
>> MethodValidator#getConstraintsForType(). 
> 
> It seems that in the grand scheme of BV 1.1, we would put all your methods 
> back on BeanDescription without necessarily adding a new type. I initially 
> thought of adding TypeDescriptor as a superclass of BeanDescriptor but the 
> idea of having the noting of properties on TypeDescriptor felt wrong (in 
> Java).
> WDYT?
> If we all agree then that means TypeDescriptor is really a (temporary) 
> subclass of BeanDescriptor 
> 
> I find the idea of BeanDescriptor extending TypeDescriptor pretty good as 
> this actually reflects reality, a bean is a special kind of type. So for BV 
> 1.1 we might have this:
> 
> TypeDescriptor extends ElementDescriptor {
> 
>     boolean isTypeConstrained();
>     Set<MethodDescriptor> getConstrainedMethods();
>     MethodDescriptor getConstraintsForMethod(Method method);
> }
> 
> public interface BeanDescriptor extends TypeDescriptor {
> 
>     boolean isBeanConstrained();
>     PropertyDescriptor getConstraintsForProperty(String propertyName);
>     Set<PropertyDescriptor> getConstrainedProperties();
> }
>  
> There would be no notion of the property concept on TypeDescriptor. 
> BeanDescriptor would be compatible with BV 1.0. One could retrieve 
> TypeDescriptors for arbitrary types, BeanDescriptors for bean types, just as 
> now. So BeanDescriptor would be some sort of "view" at a type focused on bean 
> properties. Calling getConstrainedMethods() on a BeanDescriptor would return 
> the annotated getter methods, in case there are any. Calling 
> getConstrainedProperties() for a type which has no bean style properties 
> would return nothing. BeanDescriptor#isBeanConstrained() would return false 
> if a type only has method level constraints.

Let me summarize:
 - BD extends TD
 - BD#getConstrainedMethod() returns constraints getters and methods (*)
 - BD#isBeanConstrained() does not change contract

(*) it's the logical approach but I feel like it might be inconvenient.
An alternative approach to alleviate (*) is to consider BeanDescriptor as a 
view as you said:
 - TD extends ElementDescriptor
 - BD extends ElementDescriptor
 - you can access BD from TD ( getBeanDescriptor() )

> 
> For HV 4.2 we could also do the following:
> 
> TypeDescriptor extends ElementDescriptor {
> 
>     boolean isTypeConstrained();
>     Set<MethodDescriptor> getConstrainedMethods();
>     MethodDescriptor getConstraintsForMethod(Method method);
> 
>     getBeanDescriptor();
> }
> 

ahahah, well we had the same idea.

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to