[hibernate-dev] [BV] Support for constraints by groups
Emmanuel Bernard
emmanuel at hibernate.org
Tue May 26 10:57:11 EDT 2009
Please review. Also we need to implement the // group validation in HV
to avoid to many passes.
Begin forwarded message:
> From: Emmanuel Bernard <emmanuel.bernard at JBOSS.COM>
> Date: May 26, 2009 16:43:53 CEDT
> To: JSR-303-EG at JCP.ORG
> Subject: Support for constraints by groups
> Reply-To: Java Community Process JSR #303 Expert List <JSR-303-EG at JCP.ORG
> >
>
> Hello,
> following a subject dear to Gerhard's heart :)
> I could think of two approaches, let's beat them to death and if
> possible find a better alternative :)
>
>
> # background
> When validating a specific group(s), Bean Validation expends the
> group into a sequence of groups to be validated (because a group can
> be a group sequence really). Depending on how clever the
> implementation is, it could sequencialize all group execution or try
> to validate several non sequenced group in parallel.
>
> The concept of discovering which group is validated based on the
> requested groups is complex enough so an API at the metadata level
> is required.
>
> examples
> public interface Minimal {}
>
> @GroupSequence(Minimal.class, Default.class)
> public interface Complete {}
>
>
> #1 define the API at the ElementDescriptor level
>
> BeanDescriptor bd = validator.getConstraintsForClass(Address.class);
> PropertyDescriptor pd = bd.getConstraintsForProperty("street1");
> List<Set<ConstraintDescriptor>> sequencedConstraints =
> pd.getConstraintDescriptorsForGroups(Complete.class);
> //all ConstraintDescriptor in a given set can be validated in the
> same pass
> //two sets of constraints must be validated sequencially. If one
> constraint fails, the following sets must be ignored
>
> for (Set<ConstraintDescriptor> subConstraints :
> sequencedConstraints) {
> if ( validate(subConstraints) == true ) break;
> }
>
> The API added is
> ElementDescriptor#getConstraintDescriptorsForGroups(Class<?>...
> groups)
>
> Optionally we can add
> ElementDescriptor#hasConstraints(Class<?>... groups)
>
> Pro: The metadata is never "contextual" hence has less risk of error.
> Con: Needs to pass the groups at several levels
>
> #2 define the API at the validator level (more aligned with
> Gerhard's proposal but supporting sequences)
>
> List<BeanDescriptor> sequencedDescriptors =
> validator.getConstraintsForClassAndGroups(Address.class,
> Complete.class);
> for (BeanDescriptor bd : sequencedDescriptor) {
> PropertyDescriptor pd = bd. getConstraintsForProperty("street1");
> Set<ConstraintDescriptor> subConstraints =
> pd.getConstraintDescriptors();
> if ( validate(subConstraints) == true ) break;
> }
>
> Pro: The metadata is "contextual" hence people can become confused
> Con: once contextualized, the API looks the same as the non
> contextual one
>
> Questions:
> - should we use List to represent a sequence r should we have a
> dedicated object implementing Iterable
> - we need to ensure that a given group always return the same
> sequencing regardless of the element (bean or property). This is
> necessary to ensure that one can validate all bean and property
> level constraints (and potentially the associated object) before
> going to the next sequence. How can we formalize that?
>
> WDYT of all that?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hibernate-dev/attachments/20090526/576a06e5/attachment.html
More information about the hibernate-dev
mailing list