You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by taha siddiqi <ta...@gmail.com> on 2009/03/10 14:35:41 UTC

Trying Hibernate Validator Integration

Hi,

I was working with Hibernate-validator and thought of sharing the code.

It is a listener as well as a behavior which can be used at
application level as well as with individual
components.

It is heavily inspired from wicket-jpa and wicket-hibernate
projects... I just tried some changes...

import java.util.Map;
import java.util.Arrays;
import java.util.List;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
import javax.persistence.Entity;
import javax.persistence.Embeddable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;

import org.hibernate.validator.NotNull;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.Min;
import org.hibernate.validator.Pattern;
import org.hibernate.validator.Max;
import org.hibernate.validator.Range;
import org.hibernate.validator.Past;
import org.hibernate.validator.Future;
import org.hibernate.validator.Email;
import org.hibernate.validator.CreditCardNumber;

import org.apache.wicket.validation.validator.StringValidator;
import org.apache.wicket.validation.validator.PatternValidator;
import org.apache.wicket.validation.validator.NumberValidator;
import org.apache.wicket.validation.validator.EmailAddressValidator;
import org.apache.wicket.validation.validator.CreditCardValidator;
import org.apache.wicket.validation.validator.DateValidator;

import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;
import org.apache.wicket.behavior.AbstractBehavior;
import org.apache.wicket.application.IComponentOnBeforeRenderListener;
import org.apache.wicket.application.IComponentInstantiationListener;
import org.apache.wicket.Component;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.validation.ValidationError;
import org.apache.wicket.validation.validator.StringValidator;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.model.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A validator to validate elements having
 * hibernate validators annotated.
 */
public class HibernateValidator extends AbstractBehavior
   implements IComponentOnBeforeRenderListener {

   private static Logger logger = LoggerFactory.getLogger(
HibernateValidator.class );

   public final void onBeforeRender( Component c ){
      if( !c.hasBeenRendered() ){
         configure(c);
      }
   }

   @Override
   public void beforeRender( Component c ){
      super.beforeRender( c );
      configure( c );
   }

   @SuppressWarnings( "unchecked" )
   private boolean configure( Component c ){
      if( !isApplicableFor( c ) ){
         return false;
      }

      FormComponent fc = (FormComponent)c;
      CompoundPropertyModel cpm =
         (CompoundPropertyModel)fc.getInnermostModel();

      Class clazz = cpm.getObject().getClass();
      if( clazz.isAnnotationPresent( Entity.class ) ||
          clazz.isAnnotationPresent( Embeddable.class ) ){

         try {
            AnnotatedElement element = (AnnotatedElement)
               org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
                  fc.getId(), cpm.getObject() );

            addValidator( fc, element );
         }catch( Exception ex ){
         }
      }

      return true;
   }

   protected void addValidator( FormComponent fc, AnnotatedElement element ){
      //@NotNull
      if( element.isAnnotationPresent( NotNull.class ) ||
          element.isAnnotationPresent( NotEmpty.class ) ){
         fc.setRequired( true );
      }

      //@Length( min, max )
      if( element.isAnnotationPresent( Length.class ) ){
         Length l = element.getAnnotation( Length.class );

         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
replace with max int
            fc.add( StringValidator.maximumLength( l.max() ) );
         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
            fc.add( StringValidator.lengthBetween( l.min(), l.max() ) );
         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
            fc.add( StringValidator.minimumLength( l.min() ) );
         }
      }

      //@Max( value )
      if( element.isAnnotationPresent( Max.class ) ){
         Max max = element.getAnnotation( Max.class );
         fc.add( NumberValidator.maximum( max.value() ) );
      }

      //@Min( value )
      if( element.isAnnotationPresent( Min.class ) ){
         Min min = element.getAnnotation( Min.class );
         fc.add( NumberValidator.minimum( min.value() ) );
      }

      //@Range( min, max )
      if( element.isAnnotationPresent( Range.class ) ){
         Range range = element.getAnnotation( Range.class );
         fc.add( NumberValidator.range( range.min(), range.max() ) );
      }

      //@Pattern( regexp )
      if( element.isAnnotationPresent( Pattern.class ) ){
         Pattern pattern = element.getAnnotation( Pattern.class );
         fc.add( new PatternValidator( pattern.regex() ) );
      }

      //@Past
      if( element.isAnnotationPresent( Past.class ) ){
         Past p = element.getAnnotation( Past.class );
         fc.add( DateValidator.maximum( new Date() ) );
      }

      //@Future
      if( element.isAnnotationPresent( Future.class ) ){
         fc.add( DateValidator.minimum( new Date() ) );
      }

      //@Email
      if( element.isAnnotationPresent( Email.class ) ){
         fc.add( EmailAddressValidator.getInstance() );
      }

      //@CreditCardNumber
      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
         fc.add( new CreditCardValidator() );
      }
   }

   private boolean isApplicableFor( Component c ){
      if( ! (c instanceof FormComponent) ){
         return false;
      }

      IModel model = c.getInnermostModel();
      if( model == null || model.getObject() == null ||
            !CompoundPropertyModel.class.isAssignableFrom( model.getClass() ) ){
         return false;
      }

      return true;
   }
}

regards
Taha

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Trying Hibernate Validator Integration

Posted by taha siddiqi <ta...@gmail.com>.
in your Application::init();

addComponentOnBeforeRenderListener( new HIbernateValidator() );

This will add validators to every @Entity | @Embeddable properties
using Hibernate validators
which are acting as CompoundModel()'s Objects in a Form

taha

On Sun, Mar 15, 2009 at 11:03 AM, Will Jaynes <wi...@jaynes.org> wrote:
> I guess I'm not sure what you mean. Can you please show a code snippet?
>
> On Sun, Mar 15, 2009 at 1:04 AM, taha siddiqi <ta...@gmail.com> wrote:
>
>> I actually used it as a listener and at component level in my project.
>>
>> I will try to add this feature to it..
>>
>> Thanks
>> taha
>>
>> On Sun, Mar 15, 2009 at 10:17 AM, Will Jaynes <wi...@jaynes.org> wrote:
>> > Taha, I've tried playing with  your HibernateValidator. It seems
>> necessary
>> > to add it to each form field. If I add it simply to the form, the
>> validation
>> > behavior doesn't happen. Am I missing something?
>> > Will
>> >
>> > On Sat, Mar 14, 2009 at 9:06 AM, taha siddiqi <ta...@gmail.com>
>> wrote:
>> >
>> >> I was myself very much interested and finally I found
>> >>
>> >> wicket-hibernate at
>> >>
>> >>
>> http://www.jroller.com/wireframe/entry/hibernateannotationcomponentconfigurator
>> >>
>> >> and wicket-jpa at
>> >> http://perfbench.googlecode.com/svn/trunk/perfbench/wicket-jpa/
>> >>
>> >> Then I came up which something that works for me ( already in the post )
>> >>
>> >> taha
>> >>
>> >>
>> >> On Sat, Mar 14, 2009 at 6:16 PM, Will Jaynes <wj...@gmail.com> wrote:
>> >> > In the archives, back in 2007, I see a lot of discussion about
>> >> Hibernate/JPA
>> >> > validator and Wicket, but I can't find if there was any result from
>> those
>> >> > discussions. Did anything come of it?
>> >> >
>> >> > Will
>> >> >
>> >> > On Tue, Mar 10, 2009 at 11:29 AM, taha siddiqi <tawushafeez@gmail.com
>> >> >wrote:
>> >> >
>> >> >> but then how to get a ResourceBundle from wicket resource ??
>> >> >>
>> >> >>
>> >> >> On Tue, Mar 10, 2009 at 8:43 PM, Peter Thomas <pt...@gmail.com>
>> >> wrote:
>> >> >> > On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <
>> tawushafeez@gmail.com>
>> >> >> wrote:
>> >> >> >
>> >> >> >> But the problem is when you begin to use the wicket resource
>> files,
>> >> >> >> hibernate-validator comes with its own messages and need to be
>> >> >> >> integrated with wicket ( which i was not able to )
>> >> >> >
>> >> >> >
>> >> >> > There is some info here on how to pass a resource-bundle to the
>> >> >> > ClassValidator constructor, I haven't tried it though:
>> >> >> >
>> >> >> >
>> >>
>> http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next
>> >> >> >
>> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >> taha
>> >> >> >>
>> >> >> >> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <
>> ptrthomas@gmail.com>
>> >> >> wrote:
>> >> >> >> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <
>> >> tawushafeez@gmail.com>
>> >> >> >> wrote:
>> >> >> >> >
>> >> >> >> >> Hi,
>> >> >> >> >>
>> >> >> >> >> I was working with Hibernate-validator and thought of sharing
>> the
>> >> >> code.
>> >> >> >> >>
>> >> >> >> >
>> >> >> >> > Taha: I thought the ClassValidator will handle all the different
>> >> cases
>> >> >> >> and
>> >> >> >> > annotations for you, see line #89
>> >> >> >> >
>> >> >> >> >
>> >> >> >>
>> >> >>
>> >>
>> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
>> >> >> >> >
>> >> >> >> > Is there any advantage of mapping each type (e.g. Min, Max,
>> >> >> >> > CreditCardNumber) to Wicket built-in validators ?
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >>
>> >> >> >> >> It is a listener as well as a behavior which can be used at
>> >> >> >> >> application level as well as with individual
>> >> >> >> >> components.
>> >> >> >> >>
>> >> >> >> >> It is heavily inspired from wicket-jpa and wicket-hibernate
>> >> >> >> >> projects... I just tried some changes...
>> >> >> >> >>
>> >> >> >> >> import java.util.Map;
>> >> >> >> >> import java.util.Arrays;
>> >> >> >> >> import java.util.List;
>> >> >> >> >> import java.util.Date;
>> >> >> >> >> import java.util.concurrent.ConcurrentHashMap;
>> >> >> >> >> import javax.persistence.Entity;
>> >> >> >> >> import javax.persistence.Embeddable;
>> >> >> >> >> import java.lang.reflect.Field;
>> >> >> >> >> import java.lang.reflect.Method;
>> >> >> >> >> import java.lang.annotation.Annotation;
>> >> >> >> >> import java.lang.reflect.AnnotatedElement;
>> >> >> >> >>
>> >> >> >> >> import org.hibernate.validator.NotNull;
>> >> >> >> >> import org.hibernate.validator.Length;
>> >> >> >> >> import org.hibernate.validator.NotEmpty;
>> >> >> >> >> import org.hibernate.validator.Min;
>> >> >> >> >> import org.hibernate.validator.Pattern;
>> >> >> >> >> import org.hibernate.validator.Max;
>> >> >> >> >> import org.hibernate.validator.Range;
>> >> >> >> >> import org.hibernate.validator.Past;
>> >> >> >> >> import org.hibernate.validator.Future;
>> >> >> >> >> import org.hibernate.validator.Email;
>> >> >> >> >> import org.hibernate.validator.CreditCardNumber;
>> >> >> >> >>
>> >> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> >> >> >> import org.apache.wicket.validation.validator.PatternValidator;
>> >> >> >> >> import org.apache.wicket.validation.validator.NumberValidator;
>> >> >> >> >> import
>> >> org.apache.wicket.validation.validator.EmailAddressValidator;
>> >> >> >> >> import
>> org.apache.wicket.validation.validator.CreditCardValidator;
>> >> >> >> >> import org.apache.wicket.validation.validator.DateValidator;
>> >> >> >> >>
>> >> >> >> >> import org.hibernate.validator.ClassValidator;
>> >> >> >> >> import org.hibernate.validator.InvalidValue;
>> >> >> >> >> import org.apache.wicket.behavior.AbstractBehavior;
>> >> >> >> >> import
>> >> >> org.apache.wicket.application.IComponentOnBeforeRenderListener;
>> >> >> >> >> import
>> >> org.apache.wicket.application.IComponentInstantiationListener;
>> >> >> >> >> import org.apache.wicket.Component;
>> >> >> >> >> import org.apache.wicket.markup.ComponentTag;
>> >> >> >> >> import org.apache.wicket.feedback.FeedbackMessage;
>> >> >> >> >> import org.apache.wicket.validation.IValidator;
>> >> >> >> >> import org.apache.wicket.validation.IValidatable;
>> >> >> >> >> import org.apache.wicket.model.IModel;
>> >> >> >> >> import org.apache.wicket.model.CompoundPropertyModel;
>> >> >> >> >> import org.apache.wicket.markup.html.form.FormComponent;
>> >> >> >> >> import org.apache.wicket.validation.ValidationError;
>> >> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> >> >> >> import org.apache.wicket.AttributeModifier;
>> >> >> >> >> import org.apache.wicket.model.Model;
>> >> >> >> >> import org.slf4j.Logger;
>> >> >> >> >> import org.slf4j.LoggerFactory;
>> >> >> >> >>
>> >> >> >> >> /**
>> >> >> >> >>  * A validator to validate elements having
>> >> >> >> >>  * hibernate validators annotated.
>> >> >> >> >>  */
>> >> >> >> >> public class HibernateValidator extends AbstractBehavior
>> >> >> >> >>   implements IComponentOnBeforeRenderListener {
>> >> >> >> >>
>> >> >> >> >>   private static Logger logger = LoggerFactory.getLogger(
>> >> >> >> >> HibernateValidator.class );
>> >> >> >> >>
>> >> >> >> >>   public final void onBeforeRender( Component c ){
>> >> >> >> >>      if( !c.hasBeenRendered() ){
>> >> >> >> >>         configure(c);
>> >> >> >> >>      }
>> >> >> >> >>   }
>> >> >> >> >>
>> >> >> >> >>   @Override
>> >> >> >> >>   public void beforeRender( Component c ){
>> >> >> >> >>      super.beforeRender( c );
>> >> >> >> >>      configure( c );
>> >> >> >> >>   }
>> >> >> >> >>
>> >> >> >> >>   @SuppressWarnings( "unchecked" )
>> >> >> >> >>   private boolean configure( Component c ){
>> >> >> >> >>      if( !isApplicableFor( c ) ){
>> >> >> >> >>         return false;
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      FormComponent fc = (FormComponent)c;
>> >> >> >> >>      CompoundPropertyModel cpm =
>> >> >> >> >>         (CompoundPropertyModel)fc.getInnermostModel();
>> >> >> >> >>
>> >> >> >> >>      Class clazz = cpm.getObject().getClass();
>> >> >> >> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
>> >> >> >> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
>> >> >> >> >>
>> >> >> >> >>         try {
>> >> >> >> >>            AnnotatedElement element = (AnnotatedElement)
>> >> >> >> >>
>> >> >> >> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
>> >> >> >> >>                  fc.getId(), cpm.getObject() );
>> >> >> >> >>
>> >> >> >> >>            addValidator( fc, element );
>> >> >> >> >>         }catch( Exception ex ){
>> >> >> >> >>         }
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      return true;
>> >> >> >> >>   }
>> >> >> >> >>
>> >> >> >> >>   protected void addValidator( FormComponent fc,
>> AnnotatedElement
>> >> >> >> element
>> >> >> >> >> ){
>> >> >> >> >>      //@NotNull
>> >> >> >> >>      if( element.isAnnotationPresent( NotNull.class ) ||
>> >> >> >> >>          element.isAnnotationPresent( NotEmpty.class ) ){
>> >> >> >> >>         fc.setRequired( true );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Length( min, max )
>> >> >> >> >>      if( element.isAnnotationPresent( Length.class ) ){
>> >> >> >> >>         Length l = element.getAnnotation( Length.class );
>> >> >> >> >>
>> >> >> >> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){
>> //TODO:
>> >> >> >> >> replace with max int
>> >> >> >> >>            fc.add( StringValidator.maximumLength( l.max() ) );
>> >> >> >> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE
>> ){
>> >> >> >> >>            fc.add( StringValidator.lengthBetween( l.min(),
>> l.max()
>> >> )
>> >> >> );
>> >> >> >> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE
>> ){
>> >> >> >> >>            fc.add( StringValidator.minimumLength( l.min() ) );
>> >> >> >> >>         }
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Max( value )
>> >> >> >> >>      if( element.isAnnotationPresent( Max.class ) ){
>> >> >> >> >>         Max max = element.getAnnotation( Max.class );
>> >> >> >> >>         fc.add( NumberValidator.maximum( max.value() ) );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Min( value )
>> >> >> >> >>      if( element.isAnnotationPresent( Min.class ) ){
>> >> >> >> >>         Min min = element.getAnnotation( Min.class );
>> >> >> >> >>         fc.add( NumberValidator.minimum( min.value() ) );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Range( min, max )
>> >> >> >> >>      if( element.isAnnotationPresent( Range.class ) ){
>> >> >> >> >>         Range range = element.getAnnotation( Range.class );
>> >> >> >> >>         fc.add( NumberValidator.range( range.min(), range.max()
>> )
>> >> );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Pattern( regexp )
>> >> >> >> >>      if( element.isAnnotationPresent( Pattern.class ) ){
>> >> >> >> >>         Pattern pattern = element.getAnnotation( Pattern.class
>> );
>> >> >> >> >>         fc.add( new PatternValidator( pattern.regex() ) );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Past
>> >> >> >> >>      if( element.isAnnotationPresent( Past.class ) ){
>> >> >> >> >>         Past p = element.getAnnotation( Past.class );
>> >> >> >> >>         fc.add( DateValidator.maximum( new Date() ) );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Future
>> >> >> >> >>      if( element.isAnnotationPresent( Future.class ) ){
>> >> >> >> >>         fc.add( DateValidator.minimum( new Date() ) );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@Email
>> >> >> >> >>      if( element.isAnnotationPresent( Email.class ) ){
>> >> >> >> >>         fc.add( EmailAddressValidator.getInstance() );
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      //@CreditCardNumber
>> >> >> >> >>      if( element.isAnnotationPresent( CreditCardNumber.class )
>> ){
>> >> >> >> >>         fc.add( new CreditCardValidator() );
>> >> >> >> >>      }
>> >> >> >> >>   }
>> >> >> >> >>
>> >> >> >> >>   private boolean isApplicableFor( Component c ){
>> >> >> >> >>      if( ! (c instanceof FormComponent) ){
>> >> >> >> >>         return false;
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      IModel model = c.getInnermostModel();
>> >> >> >> >>      if( model == null || model.getObject() == null ||
>> >> >> >> >>            !CompoundPropertyModel.class.isAssignableFrom(
>> >> >> >> model.getClass()
>> >> >> >> >> ) ){
>> >> >> >> >>         return false;
>> >> >> >> >>      }
>> >> >> >> >>
>> >> >> >> >>      return true;
>> >> >> >> >>   }
>> >> >> >> >> }
>> >> >> >> >>
>> >> >> >> >> regards
>> >> >> >> >> Taha
>> >> >> >> >>
>> >> >> >> >>
>> >> ---------------------------------------------------------------------
>> >> >> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> ---------------------------------------------------------------------
>> >> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >> >>
>> >> >> >>
>> >> >> >
>> >> >>
>> >> >> ---------------------------------------------------------------------
>> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >>
>> >> >>
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Trying Hibernate Validator Integration

Posted by Will Jaynes <wi...@jaynes.org>.
I guess I'm not sure what you mean. Can you please show a code snippet?

On Sun, Mar 15, 2009 at 1:04 AM, taha siddiqi <ta...@gmail.com> wrote:

> I actually used it as a listener and at component level in my project.
>
> I will try to add this feature to it..
>
> Thanks
> taha
>
> On Sun, Mar 15, 2009 at 10:17 AM, Will Jaynes <wi...@jaynes.org> wrote:
> > Taha, I've tried playing with  your HibernateValidator. It seems
> necessary
> > to add it to each form field. If I add it simply to the form, the
> validation
> > behavior doesn't happen. Am I missing something?
> > Will
> >
> > On Sat, Mar 14, 2009 at 9:06 AM, taha siddiqi <ta...@gmail.com>
> wrote:
> >
> >> I was myself very much interested and finally I found
> >>
> >> wicket-hibernate at
> >>
> >>
> http://www.jroller.com/wireframe/entry/hibernateannotationcomponentconfigurator
> >>
> >> and wicket-jpa at
> >> http://perfbench.googlecode.com/svn/trunk/perfbench/wicket-jpa/
> >>
> >> Then I came up which something that works for me ( already in the post )
> >>
> >> taha
> >>
> >>
> >> On Sat, Mar 14, 2009 at 6:16 PM, Will Jaynes <wj...@gmail.com> wrote:
> >> > In the archives, back in 2007, I see a lot of discussion about
> >> Hibernate/JPA
> >> > validator and Wicket, but I can't find if there was any result from
> those
> >> > discussions. Did anything come of it?
> >> >
> >> > Will
> >> >
> >> > On Tue, Mar 10, 2009 at 11:29 AM, taha siddiqi <tawushafeez@gmail.com
> >> >wrote:
> >> >
> >> >> but then how to get a ResourceBundle from wicket resource ??
> >> >>
> >> >>
> >> >> On Tue, Mar 10, 2009 at 8:43 PM, Peter Thomas <pt...@gmail.com>
> >> wrote:
> >> >> > On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <
> tawushafeez@gmail.com>
> >> >> wrote:
> >> >> >
> >> >> >> But the problem is when you begin to use the wicket resource
> files,
> >> >> >> hibernate-validator comes with its own messages and need to be
> >> >> >> integrated with wicket ( which i was not able to )
> >> >> >
> >> >> >
> >> >> > There is some info here on how to pass a resource-bundle to the
> >> >> > ClassValidator constructor, I haven't tried it though:
> >> >> >
> >> >> >
> >>
> http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next
> >> >> >
> >> >> >
> >> >> >>
> >> >> >>
> >> >> >> taha
> >> >> >>
> >> >> >> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <
> ptrthomas@gmail.com>
> >> >> wrote:
> >> >> >> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <
> >> tawushafeez@gmail.com>
> >> >> >> wrote:
> >> >> >> >
> >> >> >> >> Hi,
> >> >> >> >>
> >> >> >> >> I was working with Hibernate-validator and thought of sharing
> the
> >> >> code.
> >> >> >> >>
> >> >> >> >
> >> >> >> > Taha: I thought the ClassValidator will handle all the different
> >> cases
> >> >> >> and
> >> >> >> > annotations for you, see line #89
> >> >> >> >
> >> >> >> >
> >> >> >>
> >> >>
> >>
> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
> >> >> >> >
> >> >> >> > Is there any advantage of mapping each type (e.g. Min, Max,
> >> >> >> > CreditCardNumber) to Wicket built-in validators ?
> >> >> >> >
> >> >> >> >
> >> >> >> >>
> >> >> >> >> It is a listener as well as a behavior which can be used at
> >> >> >> >> application level as well as with individual
> >> >> >> >> components.
> >> >> >> >>
> >> >> >> >> It is heavily inspired from wicket-jpa and wicket-hibernate
> >> >> >> >> projects... I just tried some changes...
> >> >> >> >>
> >> >> >> >> import java.util.Map;
> >> >> >> >> import java.util.Arrays;
> >> >> >> >> import java.util.List;
> >> >> >> >> import java.util.Date;
> >> >> >> >> import java.util.concurrent.ConcurrentHashMap;
> >> >> >> >> import javax.persistence.Entity;
> >> >> >> >> import javax.persistence.Embeddable;
> >> >> >> >> import java.lang.reflect.Field;
> >> >> >> >> import java.lang.reflect.Method;
> >> >> >> >> import java.lang.annotation.Annotation;
> >> >> >> >> import java.lang.reflect.AnnotatedElement;
> >> >> >> >>
> >> >> >> >> import org.hibernate.validator.NotNull;
> >> >> >> >> import org.hibernate.validator.Length;
> >> >> >> >> import org.hibernate.validator.NotEmpty;
> >> >> >> >> import org.hibernate.validator.Min;
> >> >> >> >> import org.hibernate.validator.Pattern;
> >> >> >> >> import org.hibernate.validator.Max;
> >> >> >> >> import org.hibernate.validator.Range;
> >> >> >> >> import org.hibernate.validator.Past;
> >> >> >> >> import org.hibernate.validator.Future;
> >> >> >> >> import org.hibernate.validator.Email;
> >> >> >> >> import org.hibernate.validator.CreditCardNumber;
> >> >> >> >>
> >> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
> >> >> >> >> import org.apache.wicket.validation.validator.PatternValidator;
> >> >> >> >> import org.apache.wicket.validation.validator.NumberValidator;
> >> >> >> >> import
> >> org.apache.wicket.validation.validator.EmailAddressValidator;
> >> >> >> >> import
> org.apache.wicket.validation.validator.CreditCardValidator;
> >> >> >> >> import org.apache.wicket.validation.validator.DateValidator;
> >> >> >> >>
> >> >> >> >> import org.hibernate.validator.ClassValidator;
> >> >> >> >> import org.hibernate.validator.InvalidValue;
> >> >> >> >> import org.apache.wicket.behavior.AbstractBehavior;
> >> >> >> >> import
> >> >> org.apache.wicket.application.IComponentOnBeforeRenderListener;
> >> >> >> >> import
> >> org.apache.wicket.application.IComponentInstantiationListener;
> >> >> >> >> import org.apache.wicket.Component;
> >> >> >> >> import org.apache.wicket.markup.ComponentTag;
> >> >> >> >> import org.apache.wicket.feedback.FeedbackMessage;
> >> >> >> >> import org.apache.wicket.validation.IValidator;
> >> >> >> >> import org.apache.wicket.validation.IValidatable;
> >> >> >> >> import org.apache.wicket.model.IModel;
> >> >> >> >> import org.apache.wicket.model.CompoundPropertyModel;
> >> >> >> >> import org.apache.wicket.markup.html.form.FormComponent;
> >> >> >> >> import org.apache.wicket.validation.ValidationError;
> >> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
> >> >> >> >> import org.apache.wicket.AttributeModifier;
> >> >> >> >> import org.apache.wicket.model.Model;
> >> >> >> >> import org.slf4j.Logger;
> >> >> >> >> import org.slf4j.LoggerFactory;
> >> >> >> >>
> >> >> >> >> /**
> >> >> >> >>  * A validator to validate elements having
> >> >> >> >>  * hibernate validators annotated.
> >> >> >> >>  */
> >> >> >> >> public class HibernateValidator extends AbstractBehavior
> >> >> >> >>   implements IComponentOnBeforeRenderListener {
> >> >> >> >>
> >> >> >> >>   private static Logger logger = LoggerFactory.getLogger(
> >> >> >> >> HibernateValidator.class );
> >> >> >> >>
> >> >> >> >>   public final void onBeforeRender( Component c ){
> >> >> >> >>      if( !c.hasBeenRendered() ){
> >> >> >> >>         configure(c);
> >> >> >> >>      }
> >> >> >> >>   }
> >> >> >> >>
> >> >> >> >>   @Override
> >> >> >> >>   public void beforeRender( Component c ){
> >> >> >> >>      super.beforeRender( c );
> >> >> >> >>      configure( c );
> >> >> >> >>   }
> >> >> >> >>
> >> >> >> >>   @SuppressWarnings( "unchecked" )
> >> >> >> >>   private boolean configure( Component c ){
> >> >> >> >>      if( !isApplicableFor( c ) ){
> >> >> >> >>         return false;
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      FormComponent fc = (FormComponent)c;
> >> >> >> >>      CompoundPropertyModel cpm =
> >> >> >> >>         (CompoundPropertyModel)fc.getInnermostModel();
> >> >> >> >>
> >> >> >> >>      Class clazz = cpm.getObject().getClass();
> >> >> >> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
> >> >> >> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
> >> >> >> >>
> >> >> >> >>         try {
> >> >> >> >>            AnnotatedElement element = (AnnotatedElement)
> >> >> >> >>
> >> >> >> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
> >> >> >> >>                  fc.getId(), cpm.getObject() );
> >> >> >> >>
> >> >> >> >>            addValidator( fc, element );
> >> >> >> >>         }catch( Exception ex ){
> >> >> >> >>         }
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      return true;
> >> >> >> >>   }
> >> >> >> >>
> >> >> >> >>   protected void addValidator( FormComponent fc,
> AnnotatedElement
> >> >> >> element
> >> >> >> >> ){
> >> >> >> >>      //@NotNull
> >> >> >> >>      if( element.isAnnotationPresent( NotNull.class ) ||
> >> >> >> >>          element.isAnnotationPresent( NotEmpty.class ) ){
> >> >> >> >>         fc.setRequired( true );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Length( min, max )
> >> >> >> >>      if( element.isAnnotationPresent( Length.class ) ){
> >> >> >> >>         Length l = element.getAnnotation( Length.class );
> >> >> >> >>
> >> >> >> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){
> //TODO:
> >> >> >> >> replace with max int
> >> >> >> >>            fc.add( StringValidator.maximumLength( l.max() ) );
> >> >> >> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE
> ){
> >> >> >> >>            fc.add( StringValidator.lengthBetween( l.min(),
> l.max()
> >> )
> >> >> );
> >> >> >> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE
> ){
> >> >> >> >>            fc.add( StringValidator.minimumLength( l.min() ) );
> >> >> >> >>         }
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Max( value )
> >> >> >> >>      if( element.isAnnotationPresent( Max.class ) ){
> >> >> >> >>         Max max = element.getAnnotation( Max.class );
> >> >> >> >>         fc.add( NumberValidator.maximum( max.value() ) );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Min( value )
> >> >> >> >>      if( element.isAnnotationPresent( Min.class ) ){
> >> >> >> >>         Min min = element.getAnnotation( Min.class );
> >> >> >> >>         fc.add( NumberValidator.minimum( min.value() ) );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Range( min, max )
> >> >> >> >>      if( element.isAnnotationPresent( Range.class ) ){
> >> >> >> >>         Range range = element.getAnnotation( Range.class );
> >> >> >> >>         fc.add( NumberValidator.range( range.min(), range.max()
> )
> >> );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Pattern( regexp )
> >> >> >> >>      if( element.isAnnotationPresent( Pattern.class ) ){
> >> >> >> >>         Pattern pattern = element.getAnnotation( Pattern.class
> );
> >> >> >> >>         fc.add( new PatternValidator( pattern.regex() ) );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Past
> >> >> >> >>      if( element.isAnnotationPresent( Past.class ) ){
> >> >> >> >>         Past p = element.getAnnotation( Past.class );
> >> >> >> >>         fc.add( DateValidator.maximum( new Date() ) );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Future
> >> >> >> >>      if( element.isAnnotationPresent( Future.class ) ){
> >> >> >> >>         fc.add( DateValidator.minimum( new Date() ) );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@Email
> >> >> >> >>      if( element.isAnnotationPresent( Email.class ) ){
> >> >> >> >>         fc.add( EmailAddressValidator.getInstance() );
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      //@CreditCardNumber
> >> >> >> >>      if( element.isAnnotationPresent( CreditCardNumber.class )
> ){
> >> >> >> >>         fc.add( new CreditCardValidator() );
> >> >> >> >>      }
> >> >> >> >>   }
> >> >> >> >>
> >> >> >> >>   private boolean isApplicableFor( Component c ){
> >> >> >> >>      if( ! (c instanceof FormComponent) ){
> >> >> >> >>         return false;
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      IModel model = c.getInnermostModel();
> >> >> >> >>      if( model == null || model.getObject() == null ||
> >> >> >> >>            !CompoundPropertyModel.class.isAssignableFrom(
> >> >> >> model.getClass()
> >> >> >> >> ) ){
> >> >> >> >>         return false;
> >> >> >> >>      }
> >> >> >> >>
> >> >> >> >>      return true;
> >> >> >> >>   }
> >> >> >> >> }
> >> >> >> >>
> >> >> >> >> regards
> >> >> >> >> Taha
> >> >> >> >>
> >> >> >> >>
> >> ---------------------------------------------------------------------
> >> >> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >> >> >>
> >> >> >> >>
> >> >> >> >
> >> >> >>
> >> >> >>
> ---------------------------------------------------------------------
> >> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >> >>
> >> >> >>
> >> >> >
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >>
> >> >>
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: Trying Hibernate Validator Integration

Posted by taha siddiqi <ta...@gmail.com>.
I actually used it as a listener and at component level in my project.

I will try to add this feature to it..

Thanks
taha

On Sun, Mar 15, 2009 at 10:17 AM, Will Jaynes <wi...@jaynes.org> wrote:
> Taha, I've tried playing with  your HibernateValidator. It seems necessary
> to add it to each form field. If I add it simply to the form, the validation
> behavior doesn't happen. Am I missing something?
> Will
>
> On Sat, Mar 14, 2009 at 9:06 AM, taha siddiqi <ta...@gmail.com> wrote:
>
>> I was myself very much interested and finally I found
>>
>> wicket-hibernate at
>>
>> http://www.jroller.com/wireframe/entry/hibernateannotationcomponentconfigurator
>>
>> and wicket-jpa at
>> http://perfbench.googlecode.com/svn/trunk/perfbench/wicket-jpa/
>>
>> Then I came up which something that works for me ( already in the post )
>>
>> taha
>>
>>
>> On Sat, Mar 14, 2009 at 6:16 PM, Will Jaynes <wj...@gmail.com> wrote:
>> > In the archives, back in 2007, I see a lot of discussion about
>> Hibernate/JPA
>> > validator and Wicket, but I can't find if there was any result from those
>> > discussions. Did anything come of it?
>> >
>> > Will
>> >
>> > On Tue, Mar 10, 2009 at 11:29 AM, taha siddiqi <tawushafeez@gmail.com
>> >wrote:
>> >
>> >> but then how to get a ResourceBundle from wicket resource ??
>> >>
>> >>
>> >> On Tue, Mar 10, 2009 at 8:43 PM, Peter Thomas <pt...@gmail.com>
>> wrote:
>> >> > On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <ta...@gmail.com>
>> >> wrote:
>> >> >
>> >> >> But the problem is when you begin to use the wicket resource files,
>> >> >> hibernate-validator comes with its own messages and need to be
>> >> >> integrated with wicket ( which i was not able to )
>> >> >
>> >> >
>> >> > There is some info here on how to pass a resource-bundle to the
>> >> > ClassValidator constructor, I haven't tried it though:
>> >> >
>> >> >
>> http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next
>> >> >
>> >> >
>> >> >>
>> >> >>
>> >> >> taha
>> >> >>
>> >> >> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <pt...@gmail.com>
>> >> wrote:
>> >> >> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <
>> tawushafeez@gmail.com>
>> >> >> wrote:
>> >> >> >
>> >> >> >> Hi,
>> >> >> >>
>> >> >> >> I was working with Hibernate-validator and thought of sharing the
>> >> code.
>> >> >> >>
>> >> >> >
>> >> >> > Taha: I thought the ClassValidator will handle all the different
>> cases
>> >> >> and
>> >> >> > annotations for you, see line #89
>> >> >> >
>> >> >> >
>> >> >>
>> >>
>> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
>> >> >> >
>> >> >> > Is there any advantage of mapping each type (e.g. Min, Max,
>> >> >> > CreditCardNumber) to Wicket built-in validators ?
>> >> >> >
>> >> >> >
>> >> >> >>
>> >> >> >> It is a listener as well as a behavior which can be used at
>> >> >> >> application level as well as with individual
>> >> >> >> components.
>> >> >> >>
>> >> >> >> It is heavily inspired from wicket-jpa and wicket-hibernate
>> >> >> >> projects... I just tried some changes...
>> >> >> >>
>> >> >> >> import java.util.Map;
>> >> >> >> import java.util.Arrays;
>> >> >> >> import java.util.List;
>> >> >> >> import java.util.Date;
>> >> >> >> import java.util.concurrent.ConcurrentHashMap;
>> >> >> >> import javax.persistence.Entity;
>> >> >> >> import javax.persistence.Embeddable;
>> >> >> >> import java.lang.reflect.Field;
>> >> >> >> import java.lang.reflect.Method;
>> >> >> >> import java.lang.annotation.Annotation;
>> >> >> >> import java.lang.reflect.AnnotatedElement;
>> >> >> >>
>> >> >> >> import org.hibernate.validator.NotNull;
>> >> >> >> import org.hibernate.validator.Length;
>> >> >> >> import org.hibernate.validator.NotEmpty;
>> >> >> >> import org.hibernate.validator.Min;
>> >> >> >> import org.hibernate.validator.Pattern;
>> >> >> >> import org.hibernate.validator.Max;
>> >> >> >> import org.hibernate.validator.Range;
>> >> >> >> import org.hibernate.validator.Past;
>> >> >> >> import org.hibernate.validator.Future;
>> >> >> >> import org.hibernate.validator.Email;
>> >> >> >> import org.hibernate.validator.CreditCardNumber;
>> >> >> >>
>> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> >> >> import org.apache.wicket.validation.validator.PatternValidator;
>> >> >> >> import org.apache.wicket.validation.validator.NumberValidator;
>> >> >> >> import
>> org.apache.wicket.validation.validator.EmailAddressValidator;
>> >> >> >> import org.apache.wicket.validation.validator.CreditCardValidator;
>> >> >> >> import org.apache.wicket.validation.validator.DateValidator;
>> >> >> >>
>> >> >> >> import org.hibernate.validator.ClassValidator;
>> >> >> >> import org.hibernate.validator.InvalidValue;
>> >> >> >> import org.apache.wicket.behavior.AbstractBehavior;
>> >> >> >> import
>> >> org.apache.wicket.application.IComponentOnBeforeRenderListener;
>> >> >> >> import
>> org.apache.wicket.application.IComponentInstantiationListener;
>> >> >> >> import org.apache.wicket.Component;
>> >> >> >> import org.apache.wicket.markup.ComponentTag;
>> >> >> >> import org.apache.wicket.feedback.FeedbackMessage;
>> >> >> >> import org.apache.wicket.validation.IValidator;
>> >> >> >> import org.apache.wicket.validation.IValidatable;
>> >> >> >> import org.apache.wicket.model.IModel;
>> >> >> >> import org.apache.wicket.model.CompoundPropertyModel;
>> >> >> >> import org.apache.wicket.markup.html.form.FormComponent;
>> >> >> >> import org.apache.wicket.validation.ValidationError;
>> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> >> >> import org.apache.wicket.AttributeModifier;
>> >> >> >> import org.apache.wicket.model.Model;
>> >> >> >> import org.slf4j.Logger;
>> >> >> >> import org.slf4j.LoggerFactory;
>> >> >> >>
>> >> >> >> /**
>> >> >> >>  * A validator to validate elements having
>> >> >> >>  * hibernate validators annotated.
>> >> >> >>  */
>> >> >> >> public class HibernateValidator extends AbstractBehavior
>> >> >> >>   implements IComponentOnBeforeRenderListener {
>> >> >> >>
>> >> >> >>   private static Logger logger = LoggerFactory.getLogger(
>> >> >> >> HibernateValidator.class );
>> >> >> >>
>> >> >> >>   public final void onBeforeRender( Component c ){
>> >> >> >>      if( !c.hasBeenRendered() ){
>> >> >> >>         configure(c);
>> >> >> >>      }
>> >> >> >>   }
>> >> >> >>
>> >> >> >>   @Override
>> >> >> >>   public void beforeRender( Component c ){
>> >> >> >>      super.beforeRender( c );
>> >> >> >>      configure( c );
>> >> >> >>   }
>> >> >> >>
>> >> >> >>   @SuppressWarnings( "unchecked" )
>> >> >> >>   private boolean configure( Component c ){
>> >> >> >>      if( !isApplicableFor( c ) ){
>> >> >> >>         return false;
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      FormComponent fc = (FormComponent)c;
>> >> >> >>      CompoundPropertyModel cpm =
>> >> >> >>         (CompoundPropertyModel)fc.getInnermostModel();
>> >> >> >>
>> >> >> >>      Class clazz = cpm.getObject().getClass();
>> >> >> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
>> >> >> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
>> >> >> >>
>> >> >> >>         try {
>> >> >> >>            AnnotatedElement element = (AnnotatedElement)
>> >> >> >>
>> >> >> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
>> >> >> >>                  fc.getId(), cpm.getObject() );
>> >> >> >>
>> >> >> >>            addValidator( fc, element );
>> >> >> >>         }catch( Exception ex ){
>> >> >> >>         }
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      return true;
>> >> >> >>   }
>> >> >> >>
>> >> >> >>   protected void addValidator( FormComponent fc, AnnotatedElement
>> >> >> element
>> >> >> >> ){
>> >> >> >>      //@NotNull
>> >> >> >>      if( element.isAnnotationPresent( NotNull.class ) ||
>> >> >> >>          element.isAnnotationPresent( NotEmpty.class ) ){
>> >> >> >>         fc.setRequired( true );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Length( min, max )
>> >> >> >>      if( element.isAnnotationPresent( Length.class ) ){
>> >> >> >>         Length l = element.getAnnotation( Length.class );
>> >> >> >>
>> >> >> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
>> >> >> >> replace with max int
>> >> >> >>            fc.add( StringValidator.maximumLength( l.max() ) );
>> >> >> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
>> >> >> >>            fc.add( StringValidator.lengthBetween( l.min(), l.max()
>> )
>> >> );
>> >> >> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
>> >> >> >>            fc.add( StringValidator.minimumLength( l.min() ) );
>> >> >> >>         }
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Max( value )
>> >> >> >>      if( element.isAnnotationPresent( Max.class ) ){
>> >> >> >>         Max max = element.getAnnotation( Max.class );
>> >> >> >>         fc.add( NumberValidator.maximum( max.value() ) );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Min( value )
>> >> >> >>      if( element.isAnnotationPresent( Min.class ) ){
>> >> >> >>         Min min = element.getAnnotation( Min.class );
>> >> >> >>         fc.add( NumberValidator.minimum( min.value() ) );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Range( min, max )
>> >> >> >>      if( element.isAnnotationPresent( Range.class ) ){
>> >> >> >>         Range range = element.getAnnotation( Range.class );
>> >> >> >>         fc.add( NumberValidator.range( range.min(), range.max() )
>> );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Pattern( regexp )
>> >> >> >>      if( element.isAnnotationPresent( Pattern.class ) ){
>> >> >> >>         Pattern pattern = element.getAnnotation( Pattern.class );
>> >> >> >>         fc.add( new PatternValidator( pattern.regex() ) );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Past
>> >> >> >>      if( element.isAnnotationPresent( Past.class ) ){
>> >> >> >>         Past p = element.getAnnotation( Past.class );
>> >> >> >>         fc.add( DateValidator.maximum( new Date() ) );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Future
>> >> >> >>      if( element.isAnnotationPresent( Future.class ) ){
>> >> >> >>         fc.add( DateValidator.minimum( new Date() ) );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@Email
>> >> >> >>      if( element.isAnnotationPresent( Email.class ) ){
>> >> >> >>         fc.add( EmailAddressValidator.getInstance() );
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      //@CreditCardNumber
>> >> >> >>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
>> >> >> >>         fc.add( new CreditCardValidator() );
>> >> >> >>      }
>> >> >> >>   }
>> >> >> >>
>> >> >> >>   private boolean isApplicableFor( Component c ){
>> >> >> >>      if( ! (c instanceof FormComponent) ){
>> >> >> >>         return false;
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      IModel model = c.getInnermostModel();
>> >> >> >>      if( model == null || model.getObject() == null ||
>> >> >> >>            !CompoundPropertyModel.class.isAssignableFrom(
>> >> >> model.getClass()
>> >> >> >> ) ){
>> >> >> >>         return false;
>> >> >> >>      }
>> >> >> >>
>> >> >> >>      return true;
>> >> >> >>   }
>> >> >> >> }
>> >> >> >>
>> >> >> >> regards
>> >> >> >> Taha
>> >> >> >>
>> >> >> >>
>> ---------------------------------------------------------------------
>> >> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >> >>
>> >> >> >>
>> >> >> >
>> >> >>
>> >> >> ---------------------------------------------------------------------
>> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >>
>> >> >>
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Trying Hibernate Validator Integration

Posted by Will Jaynes <wi...@jaynes.org>.
Taha, I've tried playing with  your HibernateValidator. It seems necessary
to add it to each form field. If I add it simply to the form, the validation
behavior doesn't happen. Am I missing something?
Will

On Sat, Mar 14, 2009 at 9:06 AM, taha siddiqi <ta...@gmail.com> wrote:

> I was myself very much interested and finally I found
>
> wicket-hibernate at
>
> http://www.jroller.com/wireframe/entry/hibernateannotationcomponentconfigurator
>
> and wicket-jpa at
> http://perfbench.googlecode.com/svn/trunk/perfbench/wicket-jpa/
>
> Then I came up which something that works for me ( already in the post )
>
> taha
>
>
> On Sat, Mar 14, 2009 at 6:16 PM, Will Jaynes <wj...@gmail.com> wrote:
> > In the archives, back in 2007, I see a lot of discussion about
> Hibernate/JPA
> > validator and Wicket, but I can't find if there was any result from those
> > discussions. Did anything come of it?
> >
> > Will
> >
> > On Tue, Mar 10, 2009 at 11:29 AM, taha siddiqi <tawushafeez@gmail.com
> >wrote:
> >
> >> but then how to get a ResourceBundle from wicket resource ??
> >>
> >>
> >> On Tue, Mar 10, 2009 at 8:43 PM, Peter Thomas <pt...@gmail.com>
> wrote:
> >> > On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <ta...@gmail.com>
> >> wrote:
> >> >
> >> >> But the problem is when you begin to use the wicket resource files,
> >> >> hibernate-validator comes with its own messages and need to be
> >> >> integrated with wicket ( which i was not able to )
> >> >
> >> >
> >> > There is some info here on how to pass a resource-bundle to the
> >> > ClassValidator constructor, I haven't tried it though:
> >> >
> >> >
> http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next
> >> >
> >> >
> >> >>
> >> >>
> >> >> taha
> >> >>
> >> >> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <pt...@gmail.com>
> >> wrote:
> >> >> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <
> tawushafeez@gmail.com>
> >> >> wrote:
> >> >> >
> >> >> >> Hi,
> >> >> >>
> >> >> >> I was working with Hibernate-validator and thought of sharing the
> >> code.
> >> >> >>
> >> >> >
> >> >> > Taha: I thought the ClassValidator will handle all the different
> cases
> >> >> and
> >> >> > annotations for you, see line #89
> >> >> >
> >> >> >
> >> >>
> >>
> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
> >> >> >
> >> >> > Is there any advantage of mapping each type (e.g. Min, Max,
> >> >> > CreditCardNumber) to Wicket built-in validators ?
> >> >> >
> >> >> >
> >> >> >>
> >> >> >> It is a listener as well as a behavior which can be used at
> >> >> >> application level as well as with individual
> >> >> >> components.
> >> >> >>
> >> >> >> It is heavily inspired from wicket-jpa and wicket-hibernate
> >> >> >> projects... I just tried some changes...
> >> >> >>
> >> >> >> import java.util.Map;
> >> >> >> import java.util.Arrays;
> >> >> >> import java.util.List;
> >> >> >> import java.util.Date;
> >> >> >> import java.util.concurrent.ConcurrentHashMap;
> >> >> >> import javax.persistence.Entity;
> >> >> >> import javax.persistence.Embeddable;
> >> >> >> import java.lang.reflect.Field;
> >> >> >> import java.lang.reflect.Method;
> >> >> >> import java.lang.annotation.Annotation;
> >> >> >> import java.lang.reflect.AnnotatedElement;
> >> >> >>
> >> >> >> import org.hibernate.validator.NotNull;
> >> >> >> import org.hibernate.validator.Length;
> >> >> >> import org.hibernate.validator.NotEmpty;
> >> >> >> import org.hibernate.validator.Min;
> >> >> >> import org.hibernate.validator.Pattern;
> >> >> >> import org.hibernate.validator.Max;
> >> >> >> import org.hibernate.validator.Range;
> >> >> >> import org.hibernate.validator.Past;
> >> >> >> import org.hibernate.validator.Future;
> >> >> >> import org.hibernate.validator.Email;
> >> >> >> import org.hibernate.validator.CreditCardNumber;
> >> >> >>
> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
> >> >> >> import org.apache.wicket.validation.validator.PatternValidator;
> >> >> >> import org.apache.wicket.validation.validator.NumberValidator;
> >> >> >> import
> org.apache.wicket.validation.validator.EmailAddressValidator;
> >> >> >> import org.apache.wicket.validation.validator.CreditCardValidator;
> >> >> >> import org.apache.wicket.validation.validator.DateValidator;
> >> >> >>
> >> >> >> import org.hibernate.validator.ClassValidator;
> >> >> >> import org.hibernate.validator.InvalidValue;
> >> >> >> import org.apache.wicket.behavior.AbstractBehavior;
> >> >> >> import
> >> org.apache.wicket.application.IComponentOnBeforeRenderListener;
> >> >> >> import
> org.apache.wicket.application.IComponentInstantiationListener;
> >> >> >> import org.apache.wicket.Component;
> >> >> >> import org.apache.wicket.markup.ComponentTag;
> >> >> >> import org.apache.wicket.feedback.FeedbackMessage;
> >> >> >> import org.apache.wicket.validation.IValidator;
> >> >> >> import org.apache.wicket.validation.IValidatable;
> >> >> >> import org.apache.wicket.model.IModel;
> >> >> >> import org.apache.wicket.model.CompoundPropertyModel;
> >> >> >> import org.apache.wicket.markup.html.form.FormComponent;
> >> >> >> import org.apache.wicket.validation.ValidationError;
> >> >> >> import org.apache.wicket.validation.validator.StringValidator;
> >> >> >> import org.apache.wicket.AttributeModifier;
> >> >> >> import org.apache.wicket.model.Model;
> >> >> >> import org.slf4j.Logger;
> >> >> >> import org.slf4j.LoggerFactory;
> >> >> >>
> >> >> >> /**
> >> >> >>  * A validator to validate elements having
> >> >> >>  * hibernate validators annotated.
> >> >> >>  */
> >> >> >> public class HibernateValidator extends AbstractBehavior
> >> >> >>   implements IComponentOnBeforeRenderListener {
> >> >> >>
> >> >> >>   private static Logger logger = LoggerFactory.getLogger(
> >> >> >> HibernateValidator.class );
> >> >> >>
> >> >> >>   public final void onBeforeRender( Component c ){
> >> >> >>      if( !c.hasBeenRendered() ){
> >> >> >>         configure(c);
> >> >> >>      }
> >> >> >>   }
> >> >> >>
> >> >> >>   @Override
> >> >> >>   public void beforeRender( Component c ){
> >> >> >>      super.beforeRender( c );
> >> >> >>      configure( c );
> >> >> >>   }
> >> >> >>
> >> >> >>   @SuppressWarnings( "unchecked" )
> >> >> >>   private boolean configure( Component c ){
> >> >> >>      if( !isApplicableFor( c ) ){
> >> >> >>         return false;
> >> >> >>      }
> >> >> >>
> >> >> >>      FormComponent fc = (FormComponent)c;
> >> >> >>      CompoundPropertyModel cpm =
> >> >> >>         (CompoundPropertyModel)fc.getInnermostModel();
> >> >> >>
> >> >> >>      Class clazz = cpm.getObject().getClass();
> >> >> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
> >> >> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
> >> >> >>
> >> >> >>         try {
> >> >> >>            AnnotatedElement element = (AnnotatedElement)
> >> >> >>
> >> >> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
> >> >> >>                  fc.getId(), cpm.getObject() );
> >> >> >>
> >> >> >>            addValidator( fc, element );
> >> >> >>         }catch( Exception ex ){
> >> >> >>         }
> >> >> >>      }
> >> >> >>
> >> >> >>      return true;
> >> >> >>   }
> >> >> >>
> >> >> >>   protected void addValidator( FormComponent fc, AnnotatedElement
> >> >> element
> >> >> >> ){
> >> >> >>      //@NotNull
> >> >> >>      if( element.isAnnotationPresent( NotNull.class ) ||
> >> >> >>          element.isAnnotationPresent( NotEmpty.class ) ){
> >> >> >>         fc.setRequired( true );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Length( min, max )
> >> >> >>      if( element.isAnnotationPresent( Length.class ) ){
> >> >> >>         Length l = element.getAnnotation( Length.class );
> >> >> >>
> >> >> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
> >> >> >> replace with max int
> >> >> >>            fc.add( StringValidator.maximumLength( l.max() ) );
> >> >> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
> >> >> >>            fc.add( StringValidator.lengthBetween( l.min(), l.max()
> )
> >> );
> >> >> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
> >> >> >>            fc.add( StringValidator.minimumLength( l.min() ) );
> >> >> >>         }
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Max( value )
> >> >> >>      if( element.isAnnotationPresent( Max.class ) ){
> >> >> >>         Max max = element.getAnnotation( Max.class );
> >> >> >>         fc.add( NumberValidator.maximum( max.value() ) );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Min( value )
> >> >> >>      if( element.isAnnotationPresent( Min.class ) ){
> >> >> >>         Min min = element.getAnnotation( Min.class );
> >> >> >>         fc.add( NumberValidator.minimum( min.value() ) );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Range( min, max )
> >> >> >>      if( element.isAnnotationPresent( Range.class ) ){
> >> >> >>         Range range = element.getAnnotation( Range.class );
> >> >> >>         fc.add( NumberValidator.range( range.min(), range.max() )
> );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Pattern( regexp )
> >> >> >>      if( element.isAnnotationPresent( Pattern.class ) ){
> >> >> >>         Pattern pattern = element.getAnnotation( Pattern.class );
> >> >> >>         fc.add( new PatternValidator( pattern.regex() ) );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Past
> >> >> >>      if( element.isAnnotationPresent( Past.class ) ){
> >> >> >>         Past p = element.getAnnotation( Past.class );
> >> >> >>         fc.add( DateValidator.maximum( new Date() ) );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Future
> >> >> >>      if( element.isAnnotationPresent( Future.class ) ){
> >> >> >>         fc.add( DateValidator.minimum( new Date() ) );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@Email
> >> >> >>      if( element.isAnnotationPresent( Email.class ) ){
> >> >> >>         fc.add( EmailAddressValidator.getInstance() );
> >> >> >>      }
> >> >> >>
> >> >> >>      //@CreditCardNumber
> >> >> >>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
> >> >> >>         fc.add( new CreditCardValidator() );
> >> >> >>      }
> >> >> >>   }
> >> >> >>
> >> >> >>   private boolean isApplicableFor( Component c ){
> >> >> >>      if( ! (c instanceof FormComponent) ){
> >> >> >>         return false;
> >> >> >>      }
> >> >> >>
> >> >> >>      IModel model = c.getInnermostModel();
> >> >> >>      if( model == null || model.getObject() == null ||
> >> >> >>            !CompoundPropertyModel.class.isAssignableFrom(
> >> >> model.getClass()
> >> >> >> ) ){
> >> >> >>         return false;
> >> >> >>      }
> >> >> >>
> >> >> >>      return true;
> >> >> >>   }
> >> >> >> }
> >> >> >>
> >> >> >> regards
> >> >> >> Taha
> >> >> >>
> >> >> >>
> ---------------------------------------------------------------------
> >> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >> >>
> >> >> >>
> >> >> >
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >>
> >> >>
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: Trying Hibernate Validator Integration

Posted by taha siddiqi <ta...@gmail.com>.
I was myself very much interested and finally I found

wicket-hibernate at
http://www.jroller.com/wireframe/entry/hibernateannotationcomponentconfigurator

and wicket-jpa at
http://perfbench.googlecode.com/svn/trunk/perfbench/wicket-jpa/

Then I came up which something that works for me ( already in the post )

taha


On Sat, Mar 14, 2009 at 6:16 PM, Will Jaynes <wj...@gmail.com> wrote:
> In the archives, back in 2007, I see a lot of discussion about Hibernate/JPA
> validator and Wicket, but I can't find if there was any result from those
> discussions. Did anything come of it?
>
> Will
>
> On Tue, Mar 10, 2009 at 11:29 AM, taha siddiqi <ta...@gmail.com>wrote:
>
>> but then how to get a ResourceBundle from wicket resource ??
>>
>>
>> On Tue, Mar 10, 2009 at 8:43 PM, Peter Thomas <pt...@gmail.com> wrote:
>> > On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <ta...@gmail.com>
>> wrote:
>> >
>> >> But the problem is when you begin to use the wicket resource files,
>> >> hibernate-validator comes with its own messages and need to be
>> >> integrated with wicket ( which i was not able to )
>> >
>> >
>> > There is some info here on how to pass a resource-bundle to the
>> > ClassValidator constructor, I haven't tried it though:
>> >
>> > http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next
>> >
>> >
>> >>
>> >>
>> >> taha
>> >>
>> >> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <pt...@gmail.com>
>> wrote:
>> >> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <ta...@gmail.com>
>> >> wrote:
>> >> >
>> >> >> Hi,
>> >> >>
>> >> >> I was working with Hibernate-validator and thought of sharing the
>> code.
>> >> >>
>> >> >
>> >> > Taha: I thought the ClassValidator will handle all the different cases
>> >> and
>> >> > annotations for you, see line #89
>> >> >
>> >> >
>> >>
>> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
>> >> >
>> >> > Is there any advantage of mapping each type (e.g. Min, Max,
>> >> > CreditCardNumber) to Wicket built-in validators ?
>> >> >
>> >> >
>> >> >>
>> >> >> It is a listener as well as a behavior which can be used at
>> >> >> application level as well as with individual
>> >> >> components.
>> >> >>
>> >> >> It is heavily inspired from wicket-jpa and wicket-hibernate
>> >> >> projects... I just tried some changes...
>> >> >>
>> >> >> import java.util.Map;
>> >> >> import java.util.Arrays;
>> >> >> import java.util.List;
>> >> >> import java.util.Date;
>> >> >> import java.util.concurrent.ConcurrentHashMap;
>> >> >> import javax.persistence.Entity;
>> >> >> import javax.persistence.Embeddable;
>> >> >> import java.lang.reflect.Field;
>> >> >> import java.lang.reflect.Method;
>> >> >> import java.lang.annotation.Annotation;
>> >> >> import java.lang.reflect.AnnotatedElement;
>> >> >>
>> >> >> import org.hibernate.validator.NotNull;
>> >> >> import org.hibernate.validator.Length;
>> >> >> import org.hibernate.validator.NotEmpty;
>> >> >> import org.hibernate.validator.Min;
>> >> >> import org.hibernate.validator.Pattern;
>> >> >> import org.hibernate.validator.Max;
>> >> >> import org.hibernate.validator.Range;
>> >> >> import org.hibernate.validator.Past;
>> >> >> import org.hibernate.validator.Future;
>> >> >> import org.hibernate.validator.Email;
>> >> >> import org.hibernate.validator.CreditCardNumber;
>> >> >>
>> >> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> >> import org.apache.wicket.validation.validator.PatternValidator;
>> >> >> import org.apache.wicket.validation.validator.NumberValidator;
>> >> >> import org.apache.wicket.validation.validator.EmailAddressValidator;
>> >> >> import org.apache.wicket.validation.validator.CreditCardValidator;
>> >> >> import org.apache.wicket.validation.validator.DateValidator;
>> >> >>
>> >> >> import org.hibernate.validator.ClassValidator;
>> >> >> import org.hibernate.validator.InvalidValue;
>> >> >> import org.apache.wicket.behavior.AbstractBehavior;
>> >> >> import
>> org.apache.wicket.application.IComponentOnBeforeRenderListener;
>> >> >> import org.apache.wicket.application.IComponentInstantiationListener;
>> >> >> import org.apache.wicket.Component;
>> >> >> import org.apache.wicket.markup.ComponentTag;
>> >> >> import org.apache.wicket.feedback.FeedbackMessage;
>> >> >> import org.apache.wicket.validation.IValidator;
>> >> >> import org.apache.wicket.validation.IValidatable;
>> >> >> import org.apache.wicket.model.IModel;
>> >> >> import org.apache.wicket.model.CompoundPropertyModel;
>> >> >> import org.apache.wicket.markup.html.form.FormComponent;
>> >> >> import org.apache.wicket.validation.ValidationError;
>> >> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> >> import org.apache.wicket.AttributeModifier;
>> >> >> import org.apache.wicket.model.Model;
>> >> >> import org.slf4j.Logger;
>> >> >> import org.slf4j.LoggerFactory;
>> >> >>
>> >> >> /**
>> >> >>  * A validator to validate elements having
>> >> >>  * hibernate validators annotated.
>> >> >>  */
>> >> >> public class HibernateValidator extends AbstractBehavior
>> >> >>   implements IComponentOnBeforeRenderListener {
>> >> >>
>> >> >>   private static Logger logger = LoggerFactory.getLogger(
>> >> >> HibernateValidator.class );
>> >> >>
>> >> >>   public final void onBeforeRender( Component c ){
>> >> >>      if( !c.hasBeenRendered() ){
>> >> >>         configure(c);
>> >> >>      }
>> >> >>   }
>> >> >>
>> >> >>   @Override
>> >> >>   public void beforeRender( Component c ){
>> >> >>      super.beforeRender( c );
>> >> >>      configure( c );
>> >> >>   }
>> >> >>
>> >> >>   @SuppressWarnings( "unchecked" )
>> >> >>   private boolean configure( Component c ){
>> >> >>      if( !isApplicableFor( c ) ){
>> >> >>         return false;
>> >> >>      }
>> >> >>
>> >> >>      FormComponent fc = (FormComponent)c;
>> >> >>      CompoundPropertyModel cpm =
>> >> >>         (CompoundPropertyModel)fc.getInnermostModel();
>> >> >>
>> >> >>      Class clazz = cpm.getObject().getClass();
>> >> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
>> >> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
>> >> >>
>> >> >>         try {
>> >> >>            AnnotatedElement element = (AnnotatedElement)
>> >> >>
>> >> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
>> >> >>                  fc.getId(), cpm.getObject() );
>> >> >>
>> >> >>            addValidator( fc, element );
>> >> >>         }catch( Exception ex ){
>> >> >>         }
>> >> >>      }
>> >> >>
>> >> >>      return true;
>> >> >>   }
>> >> >>
>> >> >>   protected void addValidator( FormComponent fc, AnnotatedElement
>> >> element
>> >> >> ){
>> >> >>      //@NotNull
>> >> >>      if( element.isAnnotationPresent( NotNull.class ) ||
>> >> >>          element.isAnnotationPresent( NotEmpty.class ) ){
>> >> >>         fc.setRequired( true );
>> >> >>      }
>> >> >>
>> >> >>      //@Length( min, max )
>> >> >>      if( element.isAnnotationPresent( Length.class ) ){
>> >> >>         Length l = element.getAnnotation( Length.class );
>> >> >>
>> >> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
>> >> >> replace with max int
>> >> >>            fc.add( StringValidator.maximumLength( l.max() ) );
>> >> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
>> >> >>            fc.add( StringValidator.lengthBetween( l.min(), l.max() )
>> );
>> >> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
>> >> >>            fc.add( StringValidator.minimumLength( l.min() ) );
>> >> >>         }
>> >> >>      }
>> >> >>
>> >> >>      //@Max( value )
>> >> >>      if( element.isAnnotationPresent( Max.class ) ){
>> >> >>         Max max = element.getAnnotation( Max.class );
>> >> >>         fc.add( NumberValidator.maximum( max.value() ) );
>> >> >>      }
>> >> >>
>> >> >>      //@Min( value )
>> >> >>      if( element.isAnnotationPresent( Min.class ) ){
>> >> >>         Min min = element.getAnnotation( Min.class );
>> >> >>         fc.add( NumberValidator.minimum( min.value() ) );
>> >> >>      }
>> >> >>
>> >> >>      //@Range( min, max )
>> >> >>      if( element.isAnnotationPresent( Range.class ) ){
>> >> >>         Range range = element.getAnnotation( Range.class );
>> >> >>         fc.add( NumberValidator.range( range.min(), range.max() ) );
>> >> >>      }
>> >> >>
>> >> >>      //@Pattern( regexp )
>> >> >>      if( element.isAnnotationPresent( Pattern.class ) ){
>> >> >>         Pattern pattern = element.getAnnotation( Pattern.class );
>> >> >>         fc.add( new PatternValidator( pattern.regex() ) );
>> >> >>      }
>> >> >>
>> >> >>      //@Past
>> >> >>      if( element.isAnnotationPresent( Past.class ) ){
>> >> >>         Past p = element.getAnnotation( Past.class );
>> >> >>         fc.add( DateValidator.maximum( new Date() ) );
>> >> >>      }
>> >> >>
>> >> >>      //@Future
>> >> >>      if( element.isAnnotationPresent( Future.class ) ){
>> >> >>         fc.add( DateValidator.minimum( new Date() ) );
>> >> >>      }
>> >> >>
>> >> >>      //@Email
>> >> >>      if( element.isAnnotationPresent( Email.class ) ){
>> >> >>         fc.add( EmailAddressValidator.getInstance() );
>> >> >>      }
>> >> >>
>> >> >>      //@CreditCardNumber
>> >> >>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
>> >> >>         fc.add( new CreditCardValidator() );
>> >> >>      }
>> >> >>   }
>> >> >>
>> >> >>   private boolean isApplicableFor( Component c ){
>> >> >>      if( ! (c instanceof FormComponent) ){
>> >> >>         return false;
>> >> >>      }
>> >> >>
>> >> >>      IModel model = c.getInnermostModel();
>> >> >>      if( model == null || model.getObject() == null ||
>> >> >>            !CompoundPropertyModel.class.isAssignableFrom(
>> >> model.getClass()
>> >> >> ) ){
>> >> >>         return false;
>> >> >>      }
>> >> >>
>> >> >>      return true;
>> >> >>   }
>> >> >> }
>> >> >>
>> >> >> regards
>> >> >> Taha
>> >> >>
>> >> >> ---------------------------------------------------------------------
>> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >> >>
>> >> >>
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Trying Hibernate Validator Integration

Posted by Will Jaynes <wj...@gmail.com>.
In the archives, back in 2007, I see a lot of discussion about Hibernate/JPA
validator and Wicket, but I can't find if there was any result from those
discussions. Did anything come of it?

Will

On Tue, Mar 10, 2009 at 11:29 AM, taha siddiqi <ta...@gmail.com>wrote:

> but then how to get a ResourceBundle from wicket resource ??
>
>
> On Tue, Mar 10, 2009 at 8:43 PM, Peter Thomas <pt...@gmail.com> wrote:
> > On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <ta...@gmail.com>
> wrote:
> >
> >> But the problem is when you begin to use the wicket resource files,
> >> hibernate-validator comes with its own messages and need to be
> >> integrated with wicket ( which i was not able to )
> >
> >
> > There is some info here on how to pass a resource-bundle to the
> > ClassValidator constructor, I haven't tried it though:
> >
> > http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next
> >
> >
> >>
> >>
> >> taha
> >>
> >> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <pt...@gmail.com>
> wrote:
> >> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <ta...@gmail.com>
> >> wrote:
> >> >
> >> >> Hi,
> >> >>
> >> >> I was working with Hibernate-validator and thought of sharing the
> code.
> >> >>
> >> >
> >> > Taha: I thought the ClassValidator will handle all the different cases
> >> and
> >> > annotations for you, see line #89
> >> >
> >> >
> >>
> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
> >> >
> >> > Is there any advantage of mapping each type (e.g. Min, Max,
> >> > CreditCardNumber) to Wicket built-in validators ?
> >> >
> >> >
> >> >>
> >> >> It is a listener as well as a behavior which can be used at
> >> >> application level as well as with individual
> >> >> components.
> >> >>
> >> >> It is heavily inspired from wicket-jpa and wicket-hibernate
> >> >> projects... I just tried some changes...
> >> >>
> >> >> import java.util.Map;
> >> >> import java.util.Arrays;
> >> >> import java.util.List;
> >> >> import java.util.Date;
> >> >> import java.util.concurrent.ConcurrentHashMap;
> >> >> import javax.persistence.Entity;
> >> >> import javax.persistence.Embeddable;
> >> >> import java.lang.reflect.Field;
> >> >> import java.lang.reflect.Method;
> >> >> import java.lang.annotation.Annotation;
> >> >> import java.lang.reflect.AnnotatedElement;
> >> >>
> >> >> import org.hibernate.validator.NotNull;
> >> >> import org.hibernate.validator.Length;
> >> >> import org.hibernate.validator.NotEmpty;
> >> >> import org.hibernate.validator.Min;
> >> >> import org.hibernate.validator.Pattern;
> >> >> import org.hibernate.validator.Max;
> >> >> import org.hibernate.validator.Range;
> >> >> import org.hibernate.validator.Past;
> >> >> import org.hibernate.validator.Future;
> >> >> import org.hibernate.validator.Email;
> >> >> import org.hibernate.validator.CreditCardNumber;
> >> >>
> >> >> import org.apache.wicket.validation.validator.StringValidator;
> >> >> import org.apache.wicket.validation.validator.PatternValidator;
> >> >> import org.apache.wicket.validation.validator.NumberValidator;
> >> >> import org.apache.wicket.validation.validator.EmailAddressValidator;
> >> >> import org.apache.wicket.validation.validator.CreditCardValidator;
> >> >> import org.apache.wicket.validation.validator.DateValidator;
> >> >>
> >> >> import org.hibernate.validator.ClassValidator;
> >> >> import org.hibernate.validator.InvalidValue;
> >> >> import org.apache.wicket.behavior.AbstractBehavior;
> >> >> import
> org.apache.wicket.application.IComponentOnBeforeRenderListener;
> >> >> import org.apache.wicket.application.IComponentInstantiationListener;
> >> >> import org.apache.wicket.Component;
> >> >> import org.apache.wicket.markup.ComponentTag;
> >> >> import org.apache.wicket.feedback.FeedbackMessage;
> >> >> import org.apache.wicket.validation.IValidator;
> >> >> import org.apache.wicket.validation.IValidatable;
> >> >> import org.apache.wicket.model.IModel;
> >> >> import org.apache.wicket.model.CompoundPropertyModel;
> >> >> import org.apache.wicket.markup.html.form.FormComponent;
> >> >> import org.apache.wicket.validation.ValidationError;
> >> >> import org.apache.wicket.validation.validator.StringValidator;
> >> >> import org.apache.wicket.AttributeModifier;
> >> >> import org.apache.wicket.model.Model;
> >> >> import org.slf4j.Logger;
> >> >> import org.slf4j.LoggerFactory;
> >> >>
> >> >> /**
> >> >>  * A validator to validate elements having
> >> >>  * hibernate validators annotated.
> >> >>  */
> >> >> public class HibernateValidator extends AbstractBehavior
> >> >>   implements IComponentOnBeforeRenderListener {
> >> >>
> >> >>   private static Logger logger = LoggerFactory.getLogger(
> >> >> HibernateValidator.class );
> >> >>
> >> >>   public final void onBeforeRender( Component c ){
> >> >>      if( !c.hasBeenRendered() ){
> >> >>         configure(c);
> >> >>      }
> >> >>   }
> >> >>
> >> >>   @Override
> >> >>   public void beforeRender( Component c ){
> >> >>      super.beforeRender( c );
> >> >>      configure( c );
> >> >>   }
> >> >>
> >> >>   @SuppressWarnings( "unchecked" )
> >> >>   private boolean configure( Component c ){
> >> >>      if( !isApplicableFor( c ) ){
> >> >>         return false;
> >> >>      }
> >> >>
> >> >>      FormComponent fc = (FormComponent)c;
> >> >>      CompoundPropertyModel cpm =
> >> >>         (CompoundPropertyModel)fc.getInnermostModel();
> >> >>
> >> >>      Class clazz = cpm.getObject().getClass();
> >> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
> >> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
> >> >>
> >> >>         try {
> >> >>            AnnotatedElement element = (AnnotatedElement)
> >> >>
> >> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
> >> >>                  fc.getId(), cpm.getObject() );
> >> >>
> >> >>            addValidator( fc, element );
> >> >>         }catch( Exception ex ){
> >> >>         }
> >> >>      }
> >> >>
> >> >>      return true;
> >> >>   }
> >> >>
> >> >>   protected void addValidator( FormComponent fc, AnnotatedElement
> >> element
> >> >> ){
> >> >>      //@NotNull
> >> >>      if( element.isAnnotationPresent( NotNull.class ) ||
> >> >>          element.isAnnotationPresent( NotEmpty.class ) ){
> >> >>         fc.setRequired( true );
> >> >>      }
> >> >>
> >> >>      //@Length( min, max )
> >> >>      if( element.isAnnotationPresent( Length.class ) ){
> >> >>         Length l = element.getAnnotation( Length.class );
> >> >>
> >> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
> >> >> replace with max int
> >> >>            fc.add( StringValidator.maximumLength( l.max() ) );
> >> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
> >> >>            fc.add( StringValidator.lengthBetween( l.min(), l.max() )
> );
> >> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
> >> >>            fc.add( StringValidator.minimumLength( l.min() ) );
> >> >>         }
> >> >>      }
> >> >>
> >> >>      //@Max( value )
> >> >>      if( element.isAnnotationPresent( Max.class ) ){
> >> >>         Max max = element.getAnnotation( Max.class );
> >> >>         fc.add( NumberValidator.maximum( max.value() ) );
> >> >>      }
> >> >>
> >> >>      //@Min( value )
> >> >>      if( element.isAnnotationPresent( Min.class ) ){
> >> >>         Min min = element.getAnnotation( Min.class );
> >> >>         fc.add( NumberValidator.minimum( min.value() ) );
> >> >>      }
> >> >>
> >> >>      //@Range( min, max )
> >> >>      if( element.isAnnotationPresent( Range.class ) ){
> >> >>         Range range = element.getAnnotation( Range.class );
> >> >>         fc.add( NumberValidator.range( range.min(), range.max() ) );
> >> >>      }
> >> >>
> >> >>      //@Pattern( regexp )
> >> >>      if( element.isAnnotationPresent( Pattern.class ) ){
> >> >>         Pattern pattern = element.getAnnotation( Pattern.class );
> >> >>         fc.add( new PatternValidator( pattern.regex() ) );
> >> >>      }
> >> >>
> >> >>      //@Past
> >> >>      if( element.isAnnotationPresent( Past.class ) ){
> >> >>         Past p = element.getAnnotation( Past.class );
> >> >>         fc.add( DateValidator.maximum( new Date() ) );
> >> >>      }
> >> >>
> >> >>      //@Future
> >> >>      if( element.isAnnotationPresent( Future.class ) ){
> >> >>         fc.add( DateValidator.minimum( new Date() ) );
> >> >>      }
> >> >>
> >> >>      //@Email
> >> >>      if( element.isAnnotationPresent( Email.class ) ){
> >> >>         fc.add( EmailAddressValidator.getInstance() );
> >> >>      }
> >> >>
> >> >>      //@CreditCardNumber
> >> >>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
> >> >>         fc.add( new CreditCardValidator() );
> >> >>      }
> >> >>   }
> >> >>
> >> >>   private boolean isApplicableFor( Component c ){
> >> >>      if( ! (c instanceof FormComponent) ){
> >> >>         return false;
> >> >>      }
> >> >>
> >> >>      IModel model = c.getInnermostModel();
> >> >>      if( model == null || model.getObject() == null ||
> >> >>            !CompoundPropertyModel.class.isAssignableFrom(
> >> model.getClass()
> >> >> ) ){
> >> >>         return false;
> >> >>      }
> >> >>
> >> >>      return true;
> >> >>   }
> >> >> }
> >> >>
> >> >> regards
> >> >> Taha
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> >> For additional commands, e-mail: users-help@wicket.apache.org
> >> >>
> >> >>
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: Trying Hibernate Validator Integration

Posted by taha siddiqi <ta...@gmail.com>.
but then how to get a ResourceBundle from wicket resource ??


On Tue, Mar 10, 2009 at 8:43 PM, Peter Thomas <pt...@gmail.com> wrote:
> On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <ta...@gmail.com> wrote:
>
>> But the problem is when you begin to use the wicket resource files,
>> hibernate-validator comes with its own messages and need to be
>> integrated with wicket ( which i was not able to )
>
>
> There is some info here on how to pass a resource-bundle to the
> ClassValidator constructor, I haven't tried it though:
>
> http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next
>
>
>>
>>
>> taha
>>
>> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <pt...@gmail.com> wrote:
>> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <ta...@gmail.com>
>> wrote:
>> >
>> >> Hi,
>> >>
>> >> I was working with Hibernate-validator and thought of sharing the code.
>> >>
>> >
>> > Taha: I thought the ClassValidator will handle all the different cases
>> and
>> > annotations for you, see line #89
>> >
>> >
>> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
>> >
>> > Is there any advantage of mapping each type (e.g. Min, Max,
>> > CreditCardNumber) to Wicket built-in validators ?
>> >
>> >
>> >>
>> >> It is a listener as well as a behavior which can be used at
>> >> application level as well as with individual
>> >> components.
>> >>
>> >> It is heavily inspired from wicket-jpa and wicket-hibernate
>> >> projects... I just tried some changes...
>> >>
>> >> import java.util.Map;
>> >> import java.util.Arrays;
>> >> import java.util.List;
>> >> import java.util.Date;
>> >> import java.util.concurrent.ConcurrentHashMap;
>> >> import javax.persistence.Entity;
>> >> import javax.persistence.Embeddable;
>> >> import java.lang.reflect.Field;
>> >> import java.lang.reflect.Method;
>> >> import java.lang.annotation.Annotation;
>> >> import java.lang.reflect.AnnotatedElement;
>> >>
>> >> import org.hibernate.validator.NotNull;
>> >> import org.hibernate.validator.Length;
>> >> import org.hibernate.validator.NotEmpty;
>> >> import org.hibernate.validator.Min;
>> >> import org.hibernate.validator.Pattern;
>> >> import org.hibernate.validator.Max;
>> >> import org.hibernate.validator.Range;
>> >> import org.hibernate.validator.Past;
>> >> import org.hibernate.validator.Future;
>> >> import org.hibernate.validator.Email;
>> >> import org.hibernate.validator.CreditCardNumber;
>> >>
>> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> import org.apache.wicket.validation.validator.PatternValidator;
>> >> import org.apache.wicket.validation.validator.NumberValidator;
>> >> import org.apache.wicket.validation.validator.EmailAddressValidator;
>> >> import org.apache.wicket.validation.validator.CreditCardValidator;
>> >> import org.apache.wicket.validation.validator.DateValidator;
>> >>
>> >> import org.hibernate.validator.ClassValidator;
>> >> import org.hibernate.validator.InvalidValue;
>> >> import org.apache.wicket.behavior.AbstractBehavior;
>> >> import org.apache.wicket.application.IComponentOnBeforeRenderListener;
>> >> import org.apache.wicket.application.IComponentInstantiationListener;
>> >> import org.apache.wicket.Component;
>> >> import org.apache.wicket.markup.ComponentTag;
>> >> import org.apache.wicket.feedback.FeedbackMessage;
>> >> import org.apache.wicket.validation.IValidator;
>> >> import org.apache.wicket.validation.IValidatable;
>> >> import org.apache.wicket.model.IModel;
>> >> import org.apache.wicket.model.CompoundPropertyModel;
>> >> import org.apache.wicket.markup.html.form.FormComponent;
>> >> import org.apache.wicket.validation.ValidationError;
>> >> import org.apache.wicket.validation.validator.StringValidator;
>> >> import org.apache.wicket.AttributeModifier;
>> >> import org.apache.wicket.model.Model;
>> >> import org.slf4j.Logger;
>> >> import org.slf4j.LoggerFactory;
>> >>
>> >> /**
>> >>  * A validator to validate elements having
>> >>  * hibernate validators annotated.
>> >>  */
>> >> public class HibernateValidator extends AbstractBehavior
>> >>   implements IComponentOnBeforeRenderListener {
>> >>
>> >>   private static Logger logger = LoggerFactory.getLogger(
>> >> HibernateValidator.class );
>> >>
>> >>   public final void onBeforeRender( Component c ){
>> >>      if( !c.hasBeenRendered() ){
>> >>         configure(c);
>> >>      }
>> >>   }
>> >>
>> >>   @Override
>> >>   public void beforeRender( Component c ){
>> >>      super.beforeRender( c );
>> >>      configure( c );
>> >>   }
>> >>
>> >>   @SuppressWarnings( "unchecked" )
>> >>   private boolean configure( Component c ){
>> >>      if( !isApplicableFor( c ) ){
>> >>         return false;
>> >>      }
>> >>
>> >>      FormComponent fc = (FormComponent)c;
>> >>      CompoundPropertyModel cpm =
>> >>         (CompoundPropertyModel)fc.getInnermostModel();
>> >>
>> >>      Class clazz = cpm.getObject().getClass();
>> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
>> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
>> >>
>> >>         try {
>> >>            AnnotatedElement element = (AnnotatedElement)
>> >>
>> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
>> >>                  fc.getId(), cpm.getObject() );
>> >>
>> >>            addValidator( fc, element );
>> >>         }catch( Exception ex ){
>> >>         }
>> >>      }
>> >>
>> >>      return true;
>> >>   }
>> >>
>> >>   protected void addValidator( FormComponent fc, AnnotatedElement
>> element
>> >> ){
>> >>      //@NotNull
>> >>      if( element.isAnnotationPresent( NotNull.class ) ||
>> >>          element.isAnnotationPresent( NotEmpty.class ) ){
>> >>         fc.setRequired( true );
>> >>      }
>> >>
>> >>      //@Length( min, max )
>> >>      if( element.isAnnotationPresent( Length.class ) ){
>> >>         Length l = element.getAnnotation( Length.class );
>> >>
>> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
>> >> replace with max int
>> >>            fc.add( StringValidator.maximumLength( l.max() ) );
>> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
>> >>            fc.add( StringValidator.lengthBetween( l.min(), l.max() ) );
>> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
>> >>            fc.add( StringValidator.minimumLength( l.min() ) );
>> >>         }
>> >>      }
>> >>
>> >>      //@Max( value )
>> >>      if( element.isAnnotationPresent( Max.class ) ){
>> >>         Max max = element.getAnnotation( Max.class );
>> >>         fc.add( NumberValidator.maximum( max.value() ) );
>> >>      }
>> >>
>> >>      //@Min( value )
>> >>      if( element.isAnnotationPresent( Min.class ) ){
>> >>         Min min = element.getAnnotation( Min.class );
>> >>         fc.add( NumberValidator.minimum( min.value() ) );
>> >>      }
>> >>
>> >>      //@Range( min, max )
>> >>      if( element.isAnnotationPresent( Range.class ) ){
>> >>         Range range = element.getAnnotation( Range.class );
>> >>         fc.add( NumberValidator.range( range.min(), range.max() ) );
>> >>      }
>> >>
>> >>      //@Pattern( regexp )
>> >>      if( element.isAnnotationPresent( Pattern.class ) ){
>> >>         Pattern pattern = element.getAnnotation( Pattern.class );
>> >>         fc.add( new PatternValidator( pattern.regex() ) );
>> >>      }
>> >>
>> >>      //@Past
>> >>      if( element.isAnnotationPresent( Past.class ) ){
>> >>         Past p = element.getAnnotation( Past.class );
>> >>         fc.add( DateValidator.maximum( new Date() ) );
>> >>      }
>> >>
>> >>      //@Future
>> >>      if( element.isAnnotationPresent( Future.class ) ){
>> >>         fc.add( DateValidator.minimum( new Date() ) );
>> >>      }
>> >>
>> >>      //@Email
>> >>      if( element.isAnnotationPresent( Email.class ) ){
>> >>         fc.add( EmailAddressValidator.getInstance() );
>> >>      }
>> >>
>> >>      //@CreditCardNumber
>> >>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
>> >>         fc.add( new CreditCardValidator() );
>> >>      }
>> >>   }
>> >>
>> >>   private boolean isApplicableFor( Component c ){
>> >>      if( ! (c instanceof FormComponent) ){
>> >>         return false;
>> >>      }
>> >>
>> >>      IModel model = c.getInnermostModel();
>> >>      if( model == null || model.getObject() == null ||
>> >>            !CompoundPropertyModel.class.isAssignableFrom(
>> model.getClass()
>> >> ) ){
>> >>         return false;
>> >>      }
>> >>
>> >>      return true;
>> >>   }
>> >> }
>> >>
>> >> regards
>> >> Taha
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Trying Hibernate Validator Integration

Posted by Peter Thomas <pt...@gmail.com>.
On Tue, Mar 10, 2009 at 9:04 AM, taha siddiqi <ta...@gmail.com> wrote:

> But the problem is when you begin to use the wicket resource files,
> hibernate-validator comes with its own messages and need to be
> integrated with wicket ( which i was not able to )


There is some info here on how to pass a resource-bundle to the
ClassValidator constructor, I haven't tried it though:

http://www.jboss.org/index.html?module=bb&op=viewtopic&t=69783&view=next


>
>
> taha
>
> On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <pt...@gmail.com> wrote:
> > On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <ta...@gmail.com>
> wrote:
> >
> >> Hi,
> >>
> >> I was working with Hibernate-validator and thought of sharing the code.
> >>
> >
> > Taha: I thought the ClassValidator will handle all the different cases
> and
> > annotations for you, see line #89
> >
> >
> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
> >
> > Is there any advantage of mapping each type (e.g. Min, Max,
> > CreditCardNumber) to Wicket built-in validators ?
> >
> >
> >>
> >> It is a listener as well as a behavior which can be used at
> >> application level as well as with individual
> >> components.
> >>
> >> It is heavily inspired from wicket-jpa and wicket-hibernate
> >> projects... I just tried some changes...
> >>
> >> import java.util.Map;
> >> import java.util.Arrays;
> >> import java.util.List;
> >> import java.util.Date;
> >> import java.util.concurrent.ConcurrentHashMap;
> >> import javax.persistence.Entity;
> >> import javax.persistence.Embeddable;
> >> import java.lang.reflect.Field;
> >> import java.lang.reflect.Method;
> >> import java.lang.annotation.Annotation;
> >> import java.lang.reflect.AnnotatedElement;
> >>
> >> import org.hibernate.validator.NotNull;
> >> import org.hibernate.validator.Length;
> >> import org.hibernate.validator.NotEmpty;
> >> import org.hibernate.validator.Min;
> >> import org.hibernate.validator.Pattern;
> >> import org.hibernate.validator.Max;
> >> import org.hibernate.validator.Range;
> >> import org.hibernate.validator.Past;
> >> import org.hibernate.validator.Future;
> >> import org.hibernate.validator.Email;
> >> import org.hibernate.validator.CreditCardNumber;
> >>
> >> import org.apache.wicket.validation.validator.StringValidator;
> >> import org.apache.wicket.validation.validator.PatternValidator;
> >> import org.apache.wicket.validation.validator.NumberValidator;
> >> import org.apache.wicket.validation.validator.EmailAddressValidator;
> >> import org.apache.wicket.validation.validator.CreditCardValidator;
> >> import org.apache.wicket.validation.validator.DateValidator;
> >>
> >> import org.hibernate.validator.ClassValidator;
> >> import org.hibernate.validator.InvalidValue;
> >> import org.apache.wicket.behavior.AbstractBehavior;
> >> import org.apache.wicket.application.IComponentOnBeforeRenderListener;
> >> import org.apache.wicket.application.IComponentInstantiationListener;
> >> import org.apache.wicket.Component;
> >> import org.apache.wicket.markup.ComponentTag;
> >> import org.apache.wicket.feedback.FeedbackMessage;
> >> import org.apache.wicket.validation.IValidator;
> >> import org.apache.wicket.validation.IValidatable;
> >> import org.apache.wicket.model.IModel;
> >> import org.apache.wicket.model.CompoundPropertyModel;
> >> import org.apache.wicket.markup.html.form.FormComponent;
> >> import org.apache.wicket.validation.ValidationError;
> >> import org.apache.wicket.validation.validator.StringValidator;
> >> import org.apache.wicket.AttributeModifier;
> >> import org.apache.wicket.model.Model;
> >> import org.slf4j.Logger;
> >> import org.slf4j.LoggerFactory;
> >>
> >> /**
> >>  * A validator to validate elements having
> >>  * hibernate validators annotated.
> >>  */
> >> public class HibernateValidator extends AbstractBehavior
> >>   implements IComponentOnBeforeRenderListener {
> >>
> >>   private static Logger logger = LoggerFactory.getLogger(
> >> HibernateValidator.class );
> >>
> >>   public final void onBeforeRender( Component c ){
> >>      if( !c.hasBeenRendered() ){
> >>         configure(c);
> >>      }
> >>   }
> >>
> >>   @Override
> >>   public void beforeRender( Component c ){
> >>      super.beforeRender( c );
> >>      configure( c );
> >>   }
> >>
> >>   @SuppressWarnings( "unchecked" )
> >>   private boolean configure( Component c ){
> >>      if( !isApplicableFor( c ) ){
> >>         return false;
> >>      }
> >>
> >>      FormComponent fc = (FormComponent)c;
> >>      CompoundPropertyModel cpm =
> >>         (CompoundPropertyModel)fc.getInnermostModel();
> >>
> >>      Class clazz = cpm.getObject().getClass();
> >>      if( clazz.isAnnotationPresent( Entity.class ) ||
> >>          clazz.isAnnotationPresent( Embeddable.class ) ){
> >>
> >>         try {
> >>            AnnotatedElement element = (AnnotatedElement)
> >>
> >> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
> >>                  fc.getId(), cpm.getObject() );
> >>
> >>            addValidator( fc, element );
> >>         }catch( Exception ex ){
> >>         }
> >>      }
> >>
> >>      return true;
> >>   }
> >>
> >>   protected void addValidator( FormComponent fc, AnnotatedElement
> element
> >> ){
> >>      //@NotNull
> >>      if( element.isAnnotationPresent( NotNull.class ) ||
> >>          element.isAnnotationPresent( NotEmpty.class ) ){
> >>         fc.setRequired( true );
> >>      }
> >>
> >>      //@Length( min, max )
> >>      if( element.isAnnotationPresent( Length.class ) ){
> >>         Length l = element.getAnnotation( Length.class );
> >>
> >>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
> >> replace with max int
> >>            fc.add( StringValidator.maximumLength( l.max() ) );
> >>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
> >>            fc.add( StringValidator.lengthBetween( l.min(), l.max() ) );
> >>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
> >>            fc.add( StringValidator.minimumLength( l.min() ) );
> >>         }
> >>      }
> >>
> >>      //@Max( value )
> >>      if( element.isAnnotationPresent( Max.class ) ){
> >>         Max max = element.getAnnotation( Max.class );
> >>         fc.add( NumberValidator.maximum( max.value() ) );
> >>      }
> >>
> >>      //@Min( value )
> >>      if( element.isAnnotationPresent( Min.class ) ){
> >>         Min min = element.getAnnotation( Min.class );
> >>         fc.add( NumberValidator.minimum( min.value() ) );
> >>      }
> >>
> >>      //@Range( min, max )
> >>      if( element.isAnnotationPresent( Range.class ) ){
> >>         Range range = element.getAnnotation( Range.class );
> >>         fc.add( NumberValidator.range( range.min(), range.max() ) );
> >>      }
> >>
> >>      //@Pattern( regexp )
> >>      if( element.isAnnotationPresent( Pattern.class ) ){
> >>         Pattern pattern = element.getAnnotation( Pattern.class );
> >>         fc.add( new PatternValidator( pattern.regex() ) );
> >>      }
> >>
> >>      //@Past
> >>      if( element.isAnnotationPresent( Past.class ) ){
> >>         Past p = element.getAnnotation( Past.class );
> >>         fc.add( DateValidator.maximum( new Date() ) );
> >>      }
> >>
> >>      //@Future
> >>      if( element.isAnnotationPresent( Future.class ) ){
> >>         fc.add( DateValidator.minimum( new Date() ) );
> >>      }
> >>
> >>      //@Email
> >>      if( element.isAnnotationPresent( Email.class ) ){
> >>         fc.add( EmailAddressValidator.getInstance() );
> >>      }
> >>
> >>      //@CreditCardNumber
> >>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
> >>         fc.add( new CreditCardValidator() );
> >>      }
> >>   }
> >>
> >>   private boolean isApplicableFor( Component c ){
> >>      if( ! (c instanceof FormComponent) ){
> >>         return false;
> >>      }
> >>
> >>      IModel model = c.getInnermostModel();
> >>      if( model == null || model.getObject() == null ||
> >>            !CompoundPropertyModel.class.isAssignableFrom(
> model.getClass()
> >> ) ){
> >>         return false;
> >>      }
> >>
> >>      return true;
> >>   }
> >> }
> >>
> >> regards
> >> Taha
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: Trying Hibernate Validator Integration

Posted by taha siddiqi <ta...@gmail.com>.
But the problem is when you begin to use the wicket resource files,
hibernate-validator comes with its own messages and need to be
integrated with wicket ( which i was not able to )

taha

On Tue, Mar 10, 2009 at 8:11 PM, Peter Thomas <pt...@gmail.com> wrote:
> On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <ta...@gmail.com> wrote:
>
>> Hi,
>>
>> I was working with Hibernate-validator and thought of sharing the code.
>>
>
> Taha: I thought the ClassValidator will handle all the different cases and
> annotations for you, see line #89
>
> http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89
>
> Is there any advantage of mapping each type (e.g. Min, Max,
> CreditCardNumber) to Wicket built-in validators ?
>
>
>>
>> It is a listener as well as a behavior which can be used at
>> application level as well as with individual
>> components.
>>
>> It is heavily inspired from wicket-jpa and wicket-hibernate
>> projects... I just tried some changes...
>>
>> import java.util.Map;
>> import java.util.Arrays;
>> import java.util.List;
>> import java.util.Date;
>> import java.util.concurrent.ConcurrentHashMap;
>> import javax.persistence.Entity;
>> import javax.persistence.Embeddable;
>> import java.lang.reflect.Field;
>> import java.lang.reflect.Method;
>> import java.lang.annotation.Annotation;
>> import java.lang.reflect.AnnotatedElement;
>>
>> import org.hibernate.validator.NotNull;
>> import org.hibernate.validator.Length;
>> import org.hibernate.validator.NotEmpty;
>> import org.hibernate.validator.Min;
>> import org.hibernate.validator.Pattern;
>> import org.hibernate.validator.Max;
>> import org.hibernate.validator.Range;
>> import org.hibernate.validator.Past;
>> import org.hibernate.validator.Future;
>> import org.hibernate.validator.Email;
>> import org.hibernate.validator.CreditCardNumber;
>>
>> import org.apache.wicket.validation.validator.StringValidator;
>> import org.apache.wicket.validation.validator.PatternValidator;
>> import org.apache.wicket.validation.validator.NumberValidator;
>> import org.apache.wicket.validation.validator.EmailAddressValidator;
>> import org.apache.wicket.validation.validator.CreditCardValidator;
>> import org.apache.wicket.validation.validator.DateValidator;
>>
>> import org.hibernate.validator.ClassValidator;
>> import org.hibernate.validator.InvalidValue;
>> import org.apache.wicket.behavior.AbstractBehavior;
>> import org.apache.wicket.application.IComponentOnBeforeRenderListener;
>> import org.apache.wicket.application.IComponentInstantiationListener;
>> import org.apache.wicket.Component;
>> import org.apache.wicket.markup.ComponentTag;
>> import org.apache.wicket.feedback.FeedbackMessage;
>> import org.apache.wicket.validation.IValidator;
>> import org.apache.wicket.validation.IValidatable;
>> import org.apache.wicket.model.IModel;
>> import org.apache.wicket.model.CompoundPropertyModel;
>> import org.apache.wicket.markup.html.form.FormComponent;
>> import org.apache.wicket.validation.ValidationError;
>> import org.apache.wicket.validation.validator.StringValidator;
>> import org.apache.wicket.AttributeModifier;
>> import org.apache.wicket.model.Model;
>> import org.slf4j.Logger;
>> import org.slf4j.LoggerFactory;
>>
>> /**
>>  * A validator to validate elements having
>>  * hibernate validators annotated.
>>  */
>> public class HibernateValidator extends AbstractBehavior
>>   implements IComponentOnBeforeRenderListener {
>>
>>   private static Logger logger = LoggerFactory.getLogger(
>> HibernateValidator.class );
>>
>>   public final void onBeforeRender( Component c ){
>>      if( !c.hasBeenRendered() ){
>>         configure(c);
>>      }
>>   }
>>
>>   @Override
>>   public void beforeRender( Component c ){
>>      super.beforeRender( c );
>>      configure( c );
>>   }
>>
>>   @SuppressWarnings( "unchecked" )
>>   private boolean configure( Component c ){
>>      if( !isApplicableFor( c ) ){
>>         return false;
>>      }
>>
>>      FormComponent fc = (FormComponent)c;
>>      CompoundPropertyModel cpm =
>>         (CompoundPropertyModel)fc.getInnermostModel();
>>
>>      Class clazz = cpm.getObject().getClass();
>>      if( clazz.isAnnotationPresent( Entity.class ) ||
>>          clazz.isAnnotationPresent( Embeddable.class ) ){
>>
>>         try {
>>            AnnotatedElement element = (AnnotatedElement)
>>
>> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
>>                  fc.getId(), cpm.getObject() );
>>
>>            addValidator( fc, element );
>>         }catch( Exception ex ){
>>         }
>>      }
>>
>>      return true;
>>   }
>>
>>   protected void addValidator( FormComponent fc, AnnotatedElement element
>> ){
>>      //@NotNull
>>      if( element.isAnnotationPresent( NotNull.class ) ||
>>          element.isAnnotationPresent( NotEmpty.class ) ){
>>         fc.setRequired( true );
>>      }
>>
>>      //@Length( min, max )
>>      if( element.isAnnotationPresent( Length.class ) ){
>>         Length l = element.getAnnotation( Length.class );
>>
>>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
>> replace with max int
>>            fc.add( StringValidator.maximumLength( l.max() ) );
>>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
>>            fc.add( StringValidator.lengthBetween( l.min(), l.max() ) );
>>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
>>            fc.add( StringValidator.minimumLength( l.min() ) );
>>         }
>>      }
>>
>>      //@Max( value )
>>      if( element.isAnnotationPresent( Max.class ) ){
>>         Max max = element.getAnnotation( Max.class );
>>         fc.add( NumberValidator.maximum( max.value() ) );
>>      }
>>
>>      //@Min( value )
>>      if( element.isAnnotationPresent( Min.class ) ){
>>         Min min = element.getAnnotation( Min.class );
>>         fc.add( NumberValidator.minimum( min.value() ) );
>>      }
>>
>>      //@Range( min, max )
>>      if( element.isAnnotationPresent( Range.class ) ){
>>         Range range = element.getAnnotation( Range.class );
>>         fc.add( NumberValidator.range( range.min(), range.max() ) );
>>      }
>>
>>      //@Pattern( regexp )
>>      if( element.isAnnotationPresent( Pattern.class ) ){
>>         Pattern pattern = element.getAnnotation( Pattern.class );
>>         fc.add( new PatternValidator( pattern.regex() ) );
>>      }
>>
>>      //@Past
>>      if( element.isAnnotationPresent( Past.class ) ){
>>         Past p = element.getAnnotation( Past.class );
>>         fc.add( DateValidator.maximum( new Date() ) );
>>      }
>>
>>      //@Future
>>      if( element.isAnnotationPresent( Future.class ) ){
>>         fc.add( DateValidator.minimum( new Date() ) );
>>      }
>>
>>      //@Email
>>      if( element.isAnnotationPresent( Email.class ) ){
>>         fc.add( EmailAddressValidator.getInstance() );
>>      }
>>
>>      //@CreditCardNumber
>>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
>>         fc.add( new CreditCardValidator() );
>>      }
>>   }
>>
>>   private boolean isApplicableFor( Component c ){
>>      if( ! (c instanceof FormComponent) ){
>>         return false;
>>      }
>>
>>      IModel model = c.getInnermostModel();
>>      if( model == null || model.getObject() == null ||
>>            !CompoundPropertyModel.class.isAssignableFrom( model.getClass()
>> ) ){
>>         return false;
>>      }
>>
>>      return true;
>>   }
>> }
>>
>> regards
>> Taha
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Trying Hibernate Validator Integration

Posted by Peter Thomas <pt...@gmail.com>.
On Tue, Mar 10, 2009 at 7:35 AM, taha siddiqi <ta...@gmail.com> wrote:

> Hi,
>
> I was working with Hibernate-validator and thought of sharing the code.
>

Taha: I thought the ClassValidator will handle all the different cases and
annotations for you, see line #89

http://code.google.com/p/perfbench/source/browse/trunk/perfbench/wicket-jpa/src/main/java/wicketjpa/wicket/EditBorder.java#89

Is there any advantage of mapping each type (e.g. Min, Max,
CreditCardNumber) to Wicket built-in validators ?


>
> It is a listener as well as a behavior which can be used at
> application level as well as with individual
> components.
>
> It is heavily inspired from wicket-jpa and wicket-hibernate
> projects... I just tried some changes...
>
> import java.util.Map;
> import java.util.Arrays;
> import java.util.List;
> import java.util.Date;
> import java.util.concurrent.ConcurrentHashMap;
> import javax.persistence.Entity;
> import javax.persistence.Embeddable;
> import java.lang.reflect.Field;
> import java.lang.reflect.Method;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.AnnotatedElement;
>
> import org.hibernate.validator.NotNull;
> import org.hibernate.validator.Length;
> import org.hibernate.validator.NotEmpty;
> import org.hibernate.validator.Min;
> import org.hibernate.validator.Pattern;
> import org.hibernate.validator.Max;
> import org.hibernate.validator.Range;
> import org.hibernate.validator.Past;
> import org.hibernate.validator.Future;
> import org.hibernate.validator.Email;
> import org.hibernate.validator.CreditCardNumber;
>
> import org.apache.wicket.validation.validator.StringValidator;
> import org.apache.wicket.validation.validator.PatternValidator;
> import org.apache.wicket.validation.validator.NumberValidator;
> import org.apache.wicket.validation.validator.EmailAddressValidator;
> import org.apache.wicket.validation.validator.CreditCardValidator;
> import org.apache.wicket.validation.validator.DateValidator;
>
> import org.hibernate.validator.ClassValidator;
> import org.hibernate.validator.InvalidValue;
> import org.apache.wicket.behavior.AbstractBehavior;
> import org.apache.wicket.application.IComponentOnBeforeRenderListener;
> import org.apache.wicket.application.IComponentInstantiationListener;
> import org.apache.wicket.Component;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.feedback.FeedbackMessage;
> import org.apache.wicket.validation.IValidator;
> import org.apache.wicket.validation.IValidatable;
> import org.apache.wicket.model.IModel;
> import org.apache.wicket.model.CompoundPropertyModel;
> import org.apache.wicket.markup.html.form.FormComponent;
> import org.apache.wicket.validation.ValidationError;
> import org.apache.wicket.validation.validator.StringValidator;
> import org.apache.wicket.AttributeModifier;
> import org.apache.wicket.model.Model;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
>
> /**
>  * A validator to validate elements having
>  * hibernate validators annotated.
>  */
> public class HibernateValidator extends AbstractBehavior
>   implements IComponentOnBeforeRenderListener {
>
>   private static Logger logger = LoggerFactory.getLogger(
> HibernateValidator.class );
>
>   public final void onBeforeRender( Component c ){
>      if( !c.hasBeenRendered() ){
>         configure(c);
>      }
>   }
>
>   @Override
>   public void beforeRender( Component c ){
>      super.beforeRender( c );
>      configure( c );
>   }
>
>   @SuppressWarnings( "unchecked" )
>   private boolean configure( Component c ){
>      if( !isApplicableFor( c ) ){
>         return false;
>      }
>
>      FormComponent fc = (FormComponent)c;
>      CompoundPropertyModel cpm =
>         (CompoundPropertyModel)fc.getInnermostModel();
>
>      Class clazz = cpm.getObject().getClass();
>      if( clazz.isAnnotationPresent( Entity.class ) ||
>          clazz.isAnnotationPresent( Embeddable.class ) ){
>
>         try {
>            AnnotatedElement element = (AnnotatedElement)
>
> org.apache.wicket.util.lang.PropertyResolver.getPropertyGetter(
>                  fc.getId(), cpm.getObject() );
>
>            addValidator( fc, element );
>         }catch( Exception ex ){
>         }
>      }
>
>      return true;
>   }
>
>   protected void addValidator( FormComponent fc, AnnotatedElement element
> ){
>      //@NotNull
>      if( element.isAnnotationPresent( NotNull.class ) ||
>          element.isAnnotationPresent( NotEmpty.class ) ){
>         fc.setRequired( true );
>      }
>
>      //@Length( min, max )
>      if( element.isAnnotationPresent( Length.class ) ){
>         Length l = element.getAnnotation( Length.class );
>
>         if( l.min() == 0 && l.max() < Integer.MAX_VALUE ){ //TODO:
> replace with max int
>            fc.add( StringValidator.maximumLength( l.max() ) );
>         }else if( l.min() != 0 && l.max() < Integer.MAX_VALUE ){
>            fc.add( StringValidator.lengthBetween( l.min(), l.max() ) );
>         }else if( l.min() != 0 && l.max() >= Integer.MAX_VALUE ){
>            fc.add( StringValidator.minimumLength( l.min() ) );
>         }
>      }
>
>      //@Max( value )
>      if( element.isAnnotationPresent( Max.class ) ){
>         Max max = element.getAnnotation( Max.class );
>         fc.add( NumberValidator.maximum( max.value() ) );
>      }
>
>      //@Min( value )
>      if( element.isAnnotationPresent( Min.class ) ){
>         Min min = element.getAnnotation( Min.class );
>         fc.add( NumberValidator.minimum( min.value() ) );
>      }
>
>      //@Range( min, max )
>      if( element.isAnnotationPresent( Range.class ) ){
>         Range range = element.getAnnotation( Range.class );
>         fc.add( NumberValidator.range( range.min(), range.max() ) );
>      }
>
>      //@Pattern( regexp )
>      if( element.isAnnotationPresent( Pattern.class ) ){
>         Pattern pattern = element.getAnnotation( Pattern.class );
>         fc.add( new PatternValidator( pattern.regex() ) );
>      }
>
>      //@Past
>      if( element.isAnnotationPresent( Past.class ) ){
>         Past p = element.getAnnotation( Past.class );
>         fc.add( DateValidator.maximum( new Date() ) );
>      }
>
>      //@Future
>      if( element.isAnnotationPresent( Future.class ) ){
>         fc.add( DateValidator.minimum( new Date() ) );
>      }
>
>      //@Email
>      if( element.isAnnotationPresent( Email.class ) ){
>         fc.add( EmailAddressValidator.getInstance() );
>      }
>
>      //@CreditCardNumber
>      if( element.isAnnotationPresent( CreditCardNumber.class ) ){
>         fc.add( new CreditCardValidator() );
>      }
>   }
>
>   private boolean isApplicableFor( Component c ){
>      if( ! (c instanceof FormComponent) ){
>         return false;
>      }
>
>      IModel model = c.getInnermostModel();
>      if( model == null || model.getObject() == null ||
>            !CompoundPropertyModel.class.isAssignableFrom( model.getClass()
> ) ){
>         return false;
>      }
>
>      return true;
>   }
> }
>
> regards
> Taha
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>