r2050 - trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean
Author: tchemit Date: 2011-01-25 14:26:40 +0100 (Tue, 25 Jan 2011) New Revision: 2050 Url: http://nuiton.org/repositories/revision/nuiton-utils/2050 Log: add some documentation on BeanValidatorFactory Fix order when rebuilding a delegate validator Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidatorFactory.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/package-info.java Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidator.java 2011-01-25 13:07:59 UTC (rev 2049) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidator.java 2011-01-25 13:26:40 UTC (rev 2050) @@ -407,6 +407,17 @@ protected void rebuildDelegateValidator(Class<O> beanType, String context, NuitonValidatorScope... scopes) { + + // changing context could change fields definition + // so dettach bean, must rebuild the fields + + // Dettach the bean before any thing, because with the new delegate + // validator some old fields could not be used any longer, and then + // listeners will never have the full reset of their model... + if (bean != null) { + setBean(null); + } + if (scopes.length == 0) { scopes = NuitonValidatorScope.values(); } @@ -419,12 +430,6 @@ // remove old delegate validator delegate = validatorProvider.newValidator(validatorModel); - - // changing context could change fields definition - // so dettach bean, must rebuild the fields - if (bean != null) { - setBean(null); - } } public BeanValidator<?> getParentValidator() { Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidatorFactory.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidatorFactory.java 2011-01-25 13:07:59 UTC (rev 2049) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/BeanValidatorFactory.java 2011-01-25 13:26:40 UTC (rev 2050) @@ -52,8 +52,22 @@ LogFactory.getLog(BeanValidatorFactory.class); + /** + * Object to create new validators. + * <p/> + * If none is given, it will use the default one, says the + * {@link DefaultBeanValidatorCreator}. + */ protected static BeanValidatorCreator creator; + /** + * Obtain the bean validator creator. + * <p/> + * If none is defined, then will use a default one, says the + * {@link DefaultBeanValidatorCreator}. + * + * @return the bean validator creator + */ public static BeanValidatorCreator getCreator() { if (creator == null) { creator = new DefaultBeanValidatorCreator(); @@ -65,6 +79,11 @@ return creator; } + /** + * Sets an explicit bean validator creator. + * + * @param creator the creator to use + */ public static void setCreator(BeanValidatorCreator creator) { BeanValidatorFactory.creator = creator; if (log.isInfoEnabled()) { @@ -132,10 +151,16 @@ "type parameter can not be null."); } - NuitonValidatorProvider provider = NuitonValidatorFactory.getProvider(providerName); + // get delegate validator provider + NuitonValidatorProvider provider = + NuitonValidatorFactory.getProvider(providerName); + // get bean validator creator + BeanValidatorCreator creator = getCreator(); + + // create the new instance of bean validator BeanValidator<O> beanValidator = - getCreator().newBeanValidator(provider, type, context, scopes); + creator.newBeanValidator(provider, type, context, scopes); return beanValidator; } @@ -147,6 +172,16 @@ */ public interface BeanValidatorCreator { + /** + * Given the parameters, instanciate a new {@link BeanValidator}. + * + * @param provider the delegate validator provider + * @param type the type of object to validate + * @param context the context of validation (can be {@code null}) + * @param scopes scopes to use (if none given, will use all available scopes) + * @param <O> type of object to validate + * @return the new instance of bean validator + */ <O> BeanValidator<O> newBeanValidator( NuitonValidatorProvider provider, Class<O> type, @@ -157,14 +192,20 @@ } /** - * TODO + * Default implementation of {@link BeanValidatorCreator} which just + * instanciate a {@link BeanValidator} from the given parameters. * * @author tchemit <chemit@codelutin.com> - * @since TODO + * @since 2.0 */ public static class DefaultBeanValidatorCreator implements BeanValidatorCreator { @Override - public <O> BeanValidator<O> newBeanValidator(NuitonValidatorProvider provider, Class<O> type, String context, NuitonValidatorScope... scopes) { + public <O> BeanValidator<O> newBeanValidator( + NuitonValidatorProvider provider, + Class<O> type, + String context, + NuitonValidatorScope... scopes) { + BeanValidator<O> beanValidator = new BeanValidator<O>(provider, type, context, Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/package-info.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/package-info.java 2011-01-25 13:07:59 UTC (rev 2049) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/bean/package-info.java 2011-01-25 13:26:40 UTC (rev 2050) @@ -52,10 +52,22 @@ * BeanValidator<O> validator = BeanValidatorFactory.newBeanValidator(O.class); * </pre> * + * <h2>Using the {@link BeanValidatorCreator}</h2> + * + * It is possible to use a {@link BeanValidatorCreator} to change the + * implementation of {@link BeanValidator} instanticated by the factory. + * + * For this just use the method + * {@link BeanValidatorFactory#setCreator(BeanValidatorCreator)}. + * + * By default it will us a default creator + * ({@link BeanValidatorFactory.DefaultBeanValidatorCreator}). + * * <strong>To be continued...</strong> * * @since 2.0 */ import org.nuiton.validator.bean.BeanValidatorFactory; +import org.nuiton.validator.bean.BeanValidatorFactory.BeanValidatorCreator; import org.nuiton.validator.bean.BeanValidator;
participants (1)
-
tchemit@users.nuiton.org