[hibernate-commits] Hibernate SVN: r15823 - in validator/trunk: hibernate-validator/src/main/java/org/hibernate/validation/impl and 5 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Jan 26 20:13:37 EST 2009


Author: epbernard
Date: 2009-01-26 20:13:37 -0500 (Mon, 26 Jan 2009)
New Revision: 15823

Added:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorConfiguration.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConfigurationImpl.java
   validator/trunk/validation-api/src/main/java/javax/validation/Configuration.java
   validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBootstrap.java
   validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java
   validator/trunk/validation-api/src/main/java/javax/validation/spi/ConfigurationState.java
Removed:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorFactoryBuilder.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryBuilderImpl.java
   validator/trunk/validation-api/src/main/java/javax/validation/ValidatorFactoryBuilder.java
   validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBuilderFactory.java
   validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/SpecializedBuilderFactory.java
   validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidatorFactoryConfiguration.java
Modified:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/HibernateValidationProvider.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryImpl.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java
   validator/trunk/validation-api/src/main/java/javax/validation/Validation.java
   validator/trunk/validation-api/src/main/java/javax/validation/spi/BootstrapState.java
   validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidationProvider.java
Log:
BVAL-92 improvement in building ValidatorFactory

Copied: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorConfiguration.java (from rev 15817, validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorFactoryBuilder.java)
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorConfiguration.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorConfiguration.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -0,0 +1,12 @@
+package org.hibernate.validation;
+
+import javax.validation.Configuration;
+
+/**
+ * Uniquely identify Hibernate Validator in the Bean Validation bootstrap strategy
+ * Also contains Hibernate Validator specific configurations
+ * 
+ * @author Emmanuel Bernard
+ */
+public interface HibernateValidatorConfiguration extends Configuration<HibernateValidatorConfiguration> {
+}


Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorConfiguration.java
___________________________________________________________________
Name: svn:keywords
   + Id

Deleted: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorFactoryBuilder.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorFactoryBuilder.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/HibernateValidatorFactoryBuilder.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -1,12 +0,0 @@
-package org.hibernate.validation;
-
-import javax.validation.ValidatorFactoryBuilder;
-
-/**
- * Uniquely identify Hibernate Validator in the Bean Validation bootstrap strategy
- * Also contains Hibernate Validator specific configurations
- * 
- * @author Emmanuel Bernard
- */
-public interface HibernateValidatorFactoryBuilder extends ValidatorFactoryBuilder<HibernateValidatorFactoryBuilder> {
-}

Copied: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConfigurationImpl.java (from rev 15818, validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryBuilderImpl.java)
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConfigurationImpl.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConfigurationImpl.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -0,0 +1,145 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.impl;
+
+import java.io.InputStream;
+import java.util.List;
+import javax.validation.ConstraintValidatorFactory;
+import javax.validation.MessageInterpolator;
+import javax.validation.TraversableResolver;
+import javax.validation.ValidationException;
+import javax.validation.ValidationProviderResolver;
+import javax.validation.ValidatorFactory;
+import javax.validation.Configuration;
+import javax.validation.bootstrap.DefaultValidationProviderResolver;
+import javax.validation.spi.BootstrapState;
+import javax.validation.spi.ValidationProvider;
+import javax.validation.spi.ConfigurationState;
+
+import org.hibernate.validation.HibernateValidatorConfiguration;
+import org.hibernate.validation.Version;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ConfigurationImpl implements HibernateValidatorConfiguration, ConfigurationState {
+
+	static {
+		Version.touch();
+	}
+
+	//FIXME not sure why it is like that. We should cache these instances somehow. Static?
+	private final MessageInterpolator defaultMessageInterpolator = new ResourceBundleMessageInterpolator();
+	private final TraversableResolver defaultTraversableResolver = new DefaultTraversableResolver();
+
+	private MessageInterpolator messageInterpolator;
+	private ConstraintValidatorFactory constraintValidatorFactory = new ConstraintValidatorFactoryImpl();
+	private String configurationFile = "META-INF/validation.xml";
+	private final ValidationProvider provider;
+	private final ValidationProviderResolver providerResolver;
+	private TraversableResolver traversableResolver;
+
+	public ConfigurationImpl(BootstrapState state) {
+		if ( state.getValidationProviderResolver() == null ) {
+			this.providerResolver = new DefaultValidationProviderResolver();
+		}
+		else {
+			this.providerResolver = state.getValidationProviderResolver();
+		}
+		this.provider = null;
+		this.messageInterpolator = defaultMessageInterpolator;
+		this.traversableResolver = defaultTraversableResolver;
+	}
+
+	public ConfigurationImpl(ValidationProvider provider) {
+		if ( provider == null ) {
+			throw new ValidationException( "Assertion error: inconsistent ConfigurationImpl construction" );
+		}
+		this.provider = provider;
+		this.providerResolver = null;
+		this.messageInterpolator = defaultMessageInterpolator;
+		this.traversableResolver = defaultTraversableResolver;
+	}
+
+	public ConfigurationImpl messageInterpolator(MessageInterpolator interpolator) {
+		this.messageInterpolator = interpolator;
+		return this;
+	}
+
+	public ConfigurationImpl traversableResolver(TraversableResolver resolver) {
+		this.traversableResolver = resolver;
+		return this;
+	}
+
+	public ConfigurationImpl constraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) {
+		this.constraintValidatorFactory = constraintValidatorFactory;
+		return this;
+	}
+
+	public ValidatorFactory buildValidatorFactory() {
+		if ( isSpecificProvider() ) {
+			return provider.buildValidatorFactory( this );
+		}
+		else {
+			//read provider name from configuration
+			Class<? extends Configuration<?>> providerClass = null;
+
+			if ( providerClass != null ) {
+				for ( ValidationProvider provider : providerResolver.getValidationProviders() ) {
+					if ( provider.isSuitable( providerClass ) ) {
+						return provider.buildValidatorFactory( this );
+					}
+				}
+				throw new ValidationException( "Unable to find provider: " + providerClass );
+			}
+			else {
+				List<ValidationProvider> providers = providerResolver.getValidationProviders();
+				assert providers.size() != 0; //I run therefore I am
+				return providers.get( 0 ).buildValidatorFactory( this );
+			}
+		}
+	}
+
+	private boolean isSpecificProvider() {
+		return provider != null;
+	}
+
+	public MessageInterpolator getMessageInterpolator() {
+		return messageInterpolator;
+	}
+
+	public ConstraintValidatorFactory getConstraintValidatorFactory() {
+		return constraintValidatorFactory;
+	}
+
+	public TraversableResolver getTraversableResolver() {
+		return traversableResolver;
+	}
+
+	public ConfigurationImpl customConfiguration(InputStream stream) {
+		return null;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public MessageInterpolator getDefaultMessageInterpolator() {
+		return defaultMessageInterpolator;
+	}
+
+	public InputStream getConfigurationStream() {
+		return null;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+}


Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConfigurationImpl.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/HibernateValidationProvider.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/HibernateValidationProvider.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/HibernateValidationProvider.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -18,14 +18,13 @@
 package org.hibernate.validation.impl;
 
 import javax.validation.ValidationException;
-import javax.validation.ValidatorFactoryBuilder;
+import javax.validation.Configuration;
 import javax.validation.ValidatorFactory;
 import javax.validation.spi.ValidationProvider;
-import javax.validation.spi.ValidatorFactoryConfiguration;
+import javax.validation.spi.ConfigurationState;
 import javax.validation.spi.BootstrapState;
 
-import org.hibernate.validation.HibernateValidatorFactoryBuilder;
-import org.hibernate.validation.Version;
+import org.hibernate.validation.HibernateValidatorConfiguration;
 
 /**
  * Default implementation of <code>ValidationProvider</code> within Hibernate validator.
@@ -38,31 +37,31 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	public boolean isSuitable(Class<? extends ValidatorFactoryBuilder<?>> builderClass) {
-		return builderClass == HibernateValidatorFactoryBuilder.class;
+	public boolean isSuitable(Class<? extends Configuration<?>> builderClass) {
+		return builderClass == HibernateValidatorConfiguration.class;
 	}
 
-	public <T extends ValidatorFactoryBuilder<T>> T createSpecializedValidatorFactoryBuilder(BootstrapState state, Class<T> builderClass) {
-		if ( !isSuitable( builderClass ) ) {
+	public <T extends Configuration<T>> T createSpecializedConfiguration(BootstrapState state, Class<T> configurationClass) {
+		if ( !isSuitable( configurationClass ) ) {
 			throw new ValidationException(
-					"Illegal call to createSpecializedValidatorFactoryBuilder() for a non suitable provider"
+					"Illegal call to createSpecializedConfiguration() for a non suitable provider"
 			);
 		}
 		//cast protected  by isSuitable call
-		return builderClass.cast( new ValidatorFactoryBuilderImpl( this ) );
+		return configurationClass.cast( new ConfigurationImpl( this ) );
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
-	public ValidatorFactoryBuilder<?> createGenericValidatorFactoryBuilder(BootstrapState state) {
-		return new ValidatorFactoryBuilderImpl( state );
+	public Configuration<?> createGenericConfiguration(BootstrapState state) {
+		return new ConfigurationImpl( state );
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
-	public ValidatorFactory buildValidatorFactory(ValidatorFactoryConfiguration configuration) {
-		return new ValidatorFactoryImpl( configuration );
+	public ValidatorFactory buildValidatorFactory(ConfigurationState configurationState) {
+		return new ValidatorFactoryImpl( configurationState );
 	}
 }

Deleted: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryBuilderImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryBuilderImpl.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryBuilderImpl.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -1,145 +0,0 @@
-// $Id$
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-* http://www.apache.org/licenses/LICENSE-2.0
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.hibernate.validation.impl;
-
-import java.io.InputStream;
-import java.util.List;
-import javax.validation.ConstraintValidatorFactory;
-import javax.validation.MessageInterpolator;
-import javax.validation.TraversableResolver;
-import javax.validation.ValidationException;
-import javax.validation.ValidationProviderResolver;
-import javax.validation.ValidatorFactory;
-import javax.validation.ValidatorFactoryBuilder;
-import javax.validation.bootstrap.DefaultValidationProviderResolver;
-import javax.validation.spi.BootstrapState;
-import javax.validation.spi.ValidationProvider;
-import javax.validation.spi.ValidatorFactoryConfiguration;
-
-import org.hibernate.validation.HibernateValidatorFactoryBuilder;
-import org.hibernate.validation.Version;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ValidatorFactoryBuilderImpl implements HibernateValidatorFactoryBuilder, ValidatorFactoryConfiguration {
-
-	static {
-		Version.touch();
-	}
-
-	//FIXME not sure why it is like that. We should cache these instances somehow. Static?
-	private final MessageInterpolator defaultMessageInterpolator = new ResourceBundleMessageInterpolator();
-	private final TraversableResolver defaultTraversableResolver = new DefaultTraversableResolver();
-
-	private MessageInterpolator messageInterpolator;
-	private ConstraintValidatorFactory constraintValidatorFactory = new ConstraintValidatorFactoryImpl();
-	private String configurationFile = "META-INF/validation.xml";
-	private final ValidationProvider provider;
-	private final ValidationProviderResolver providerResolver;
-	private TraversableResolver traversableResolver;
-
-	public ValidatorFactoryBuilderImpl(BootstrapState state) {
-		if ( state.getValidationProviderResolver() == null ) {
-			this.providerResolver = new DefaultValidationProviderResolver();
-		}
-		else {
-			this.providerResolver = state.getValidationProviderResolver();
-		}
-		this.provider = null;
-		this.messageInterpolator = defaultMessageInterpolator;
-		this.traversableResolver = defaultTraversableResolver;
-	}
-
-	public ValidatorFactoryBuilderImpl(ValidationProvider provider) {
-		if ( provider == null ) {
-			throw new ValidationException( "Assertion error: inconsistent ValidatorFactoryBuilderImpl construction" );
-		}
-		this.provider = provider;
-		this.providerResolver = null;
-		this.messageInterpolator = defaultMessageInterpolator;
-		this.traversableResolver = defaultTraversableResolver;
-	}
-
-	public ValidatorFactoryBuilderImpl messageInterpolator(MessageInterpolator interpolator) {
-		this.messageInterpolator = interpolator;
-		return this;
-	}
-
-	public ValidatorFactoryBuilderImpl traversableResolver(TraversableResolver resolver) {
-		this.traversableResolver = resolver;
-		return this;
-	}
-
-	public ValidatorFactoryBuilderImpl constraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) {
-		this.constraintValidatorFactory = constraintValidatorFactory;
-		return this;
-	}
-
-	public ValidatorFactory build() {
-		if ( isSpecificProvider() ) {
-			return provider.buildValidatorFactory( this );
-		}
-		else {
-			//read provider name from configuration
-			Class<? extends ValidatorFactoryBuilder<?>> providerClass = null;
-
-			if ( providerClass != null ) {
-				for ( ValidationProvider provider : providerResolver.getValidationProviders() ) {
-					if ( provider.isSuitable( providerClass ) ) {
-						return provider.buildValidatorFactory( this );
-					}
-				}
-				throw new ValidationException( "Unable to find provider: " + providerClass );
-			}
-			else {
-				List<ValidationProvider> providers = providerResolver.getValidationProviders();
-				assert providers.size() != 0; //I run therefore I am
-				return providers.get( 0 ).buildValidatorFactory( this );
-			}
-		}
-	}
-
-	private boolean isSpecificProvider() {
-		return provider != null;
-	}
-
-	public MessageInterpolator getMessageInterpolator() {
-		return messageInterpolator;
-	}
-
-	public ConstraintValidatorFactory getConstraintValidatorFactory() {
-		return constraintValidatorFactory;
-	}
-
-	public TraversableResolver getTraversableResolver() {
-		return traversableResolver;
-	}
-
-	public ValidatorFactoryBuilderImpl configure(InputStream stream) {
-		return null;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public MessageInterpolator getDefaultMessageInterpolator() {
-		return defaultMessageInterpolator;
-	}
-
-	public InputStream getConfigurationStream() {
-		return null;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-}

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryImpl.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ValidatorFactoryImpl.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -24,7 +24,7 @@
 import javax.validation.TraversableResolver;
 import javax.validation.Validator;
 import javax.validation.ValidatorBuilder;
-import javax.validation.spi.ValidatorFactoryConfiguration;
+import javax.validation.spi.ConfigurationState;
 
 import org.hibernate.validation.engine.BeanMetaDataImpl;
 import org.hibernate.validation.engine.ValidatorFactoryImplementor;
@@ -44,10 +44,10 @@
 			= new ConcurrentHashMap<Class<?>, BeanMetaDataImpl<?>>(10);
 
 
-	public ValidatorFactoryImpl(ValidatorFactoryConfiguration configuration) {
-		this.messageInterpolator = configuration.getMessageInterpolator();
-		this.constraintValidatorFactory = configuration.getConstraintValidatorFactory();
-		this.traversableResolver = configuration.getTraversableResolver();
+	public ValidatorFactoryImpl(ConfigurationState configurationState) {
+		this.messageInterpolator = configurationState.getMessageInterpolator();
+		this.constraintValidatorFactory = configurationState.getConstraintValidatorFactory();
+		this.traversableResolver = configurationState.getTraversableResolver();
 		//do init metadata from XML form
 	}
 

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -30,10 +30,10 @@
 import javax.validation.ValidationException;
 import javax.validation.ValidationProviderResolver;
 import javax.validation.Validator;
-import javax.validation.ValidatorFactoryBuilder;
+import javax.validation.Configuration;
 import javax.validation.ValidatorFactory;
 import javax.validation.ConstraintValidatorContext;
-import javax.validation.bootstrap.SpecializedBuilderFactory;
+import javax.validation.bootstrap.ProviderSpecificBootstrap;
 import javax.validation.spi.ValidationProvider;
 
 import static org.junit.Assert.assertEquals;
@@ -42,11 +42,11 @@
 import static org.junit.Assert.fail;
 import org.junit.Test;
 
-import org.hibernate.validation.HibernateValidatorFactoryBuilder;
+import org.hibernate.validation.HibernateValidatorConfiguration;
 import org.hibernate.validation.constraints.NotNullConstraintValidator;
 import org.hibernate.validation.eg.Customer;
 import org.hibernate.validation.impl.ConstraintValidatorFactoryImpl;
-import org.hibernate.validation.impl.ValidatorFactoryBuilderImpl;
+import org.hibernate.validation.impl.ConfigurationImpl;
 import org.hibernate.validation.impl.ValidatorFactoryImpl;
 import org.hibernate.validation.impl.HibernateValidationProvider;
 
@@ -59,24 +59,24 @@
 
 	@Test
 	public void testBootstrapAsServiceWithBuilder() {
-		HibernateValidatorFactoryBuilder builder = Validation
-				.builderType( HibernateValidatorFactoryBuilder.class )
-				.getBuilder();
-		assertDefaultBuilderAndFactory( builder );
+		HibernateValidatorConfiguration configuration = Validation
+				.byProvider( HibernateValidatorConfiguration.class )
+				.configure();
+		assertDefaultBuilderAndFactory( configuration );
 	}
 
 	@Test
 	public void testBootstrapAsServiceDefault() {
-		ValidatorFactoryBuilder<?> builder = Validation.getBuilder();
-		assertDefaultBuilderAndFactory( builder );
+		ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
+		assertDefaultFactory( factory );
 	}
 
 	@Test
-	public void testGetCustomerValiator() {
-		ValidatorFactoryBuilder<?> builder = Validation.getBuilder();
-		assertDefaultBuilderAndFactory( builder );
+	public void testGetCustomerValidator() {
+		Configuration<?> configuration = Validation.byDefaultProvider().configure();
+		assertDefaultBuilderAndFactory( configuration );
 
-		ValidatorFactory factory = builder.build();
+		ValidatorFactory factory = configuration.buildValidatorFactory();
 		Validator validator = factory.getValidator();
 
 		Customer customer = new Customer();
@@ -96,10 +96,10 @@
 	public void testCustomMessageInterpolator() {
 
 		// first try with the default message resolver
-		ValidatorFactoryBuilder<?> builder = Validation.getBuilder();
-		assertDefaultBuilderAndFactory( builder );
+		Configuration<?> configuration = Validation.byDefaultProvider().configure();
+		assertDefaultBuilderAndFactory( configuration );
 
-		ValidatorFactory factory = builder.build();
+		ValidatorFactory factory = configuration.buildValidatorFactory();
 		Validator validator = factory.getValidator( );
 
 		Customer customer = new Customer();
@@ -110,9 +110,9 @@
 		ConstraintViolation<Customer> constraintViolation = constraintViolations.iterator().next();
 		assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
 
-		//FIXME nothing guarantee that a builder can be reused
-		// now we modify the builder, get a new factory and valiator and try again
-		builder.messageInterpolator(
+		//FIXME nothing guarantee that a configuration can be reused
+		// now we modify the configuration, get a new factory and valiator and try again
+		configuration.messageInterpolator(
 				new MessageInterpolator() {
 					public String interpolate(String message, ConstraintDescriptor constraintDescriptor, Object value) {
 						return "my custom message";
@@ -123,7 +123,7 @@
 					}
 				}
 		);
-		factory = builder.build();
+		factory = configuration.buildValidatorFactory();
 		validator = factory.getValidator( );
 		constraintViolations = validator.validate( customer );
 		assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
@@ -134,10 +134,10 @@
 	@Test
 	public void testCustomConstraintValidatorFactory() {
 
-		ValidatorFactoryBuilder<?> builder = Validation.getBuilder();
-		assertDefaultBuilderAndFactory( builder );
+		Configuration<?> configuration = Validation.byDefaultProvider().configure();
+		assertDefaultBuilderAndFactory( configuration );
 
-		ValidatorFactory factory = builder.build();
+		ValidatorFactory factory = configuration.buildValidatorFactory();
 		Validator validator = factory.getValidator(  );
 
 		Customer customer = new Customer();
@@ -148,9 +148,9 @@
 		ConstraintViolation<Customer> constraintViolation = constraintViolations.iterator().next();
 		assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
 
-		//FIXME nothing guarantee that a builder can be reused
-		// now we modify the builder, get a new factory and valiator and try again
-		builder.constraintValidatorFactory(
+		//FIXME nothing guarantee that a configuration can be reused
+		// now we modify the configuration, get a new factory and valiator and try again
+		configuration.constraintValidatorFactory(
 				new ConstraintValidatorFactory() {
 					public <T extends ConstraintValidator> T getInstance(Class<T> key) {
 						if ( key == NotNullConstraintValidator.class ) {
@@ -160,7 +160,7 @@
 					}
 				}
 		);
-		factory = builder.build();
+		factory = configuration.buildValidatorFactory();
 		validator = factory.getValidator( );
 		constraintViolations = validator.validate( customer );
 		assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
@@ -178,11 +178,11 @@
 		};
 
 
-		HibernateValidatorFactoryBuilder builder = Validation
-					.builderType( HibernateValidatorFactoryBuilder.class )
+		HibernateValidatorConfiguration configuration = Validation
+					.byProvider( HibernateValidatorConfiguration.class )
 					.providerResolver( resolver )
-					.getBuilder();
-		assertDefaultBuilderAndFactory( builder );
+					.configure();
+		assertDefaultBuilderAndFactory( configuration );
 	}
 
 	@Test
@@ -197,11 +197,11 @@
 		};
 
 
-		ValidatorFactoryBuilder<?> builder = Validation
-			        .defineBootstrapState()
+		Configuration<?> configuration = Validation
+			        .byDefaultProvider()
 					.providerResolver( resolver )
-					.getBuilder();
-		assertDefaultBuilderAndFactory( builder );
+					.configure();
+		assertDefaultBuilderAndFactory( configuration );
 	}
 
 	@Test
@@ -213,29 +213,33 @@
 			}
 		};
 
-		final SpecializedBuilderFactory<HibernateValidatorFactoryBuilder> specializedBuilderFactory =
+		final ProviderSpecificBootstrap<HibernateValidatorConfiguration> providerSpecificBootstrap =
 				Validation
-						.builderType( HibernateValidatorFactoryBuilder.class)
+						.byProvider( HibernateValidatorConfiguration.class)
 						.providerResolver( resolver );
 
 		try {
-			specializedBuilderFactory.getBuilder();
+			providerSpecificBootstrap.configure();
 			fail();
 		}
 		catch ( ValidationException e ) {
 			assertEquals(
 					"Wrong error message",
-					"Unable to find provider: interface org.hibernate.validation.HibernateValidatorFactoryBuilder",
+					"Unable to find provider: interface org.hibernate.validation.HibernateValidatorConfiguration",
 					e.getMessage()
 			);
 		}
 	}
 
-	private void assertDefaultBuilderAndFactory(ValidatorFactoryBuilder builder) {
-		assertNotNull( builder );
-		assertTrue( builder instanceof ValidatorFactoryBuilderImpl );
+	private void assertDefaultBuilderAndFactory(Configuration configuration) {
+		assertNotNull( configuration );
+		assertTrue( configuration instanceof ConfigurationImpl );
 
-		ValidatorFactory factory = builder.build();
+		ValidatorFactory factory = configuration.buildValidatorFactory();
+		assertDefaultFactory(factory);
+	}
+
+	private void assertDefaultFactory(ValidatorFactory factory) {
 		assertNotNull( factory );
 		assertTrue( factory instanceof ValidatorFactoryImpl );
 	}

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -24,7 +24,7 @@
 
 import static org.junit.Assert.assertEquals;
 
-import org.hibernate.validation.HibernateValidatorFactoryBuilder;
+import org.hibernate.validation.HibernateValidatorConfiguration;
 
 /**
  * Tests for the <code>ReflectionHelper</code>.
@@ -40,10 +40,10 @@
 
 	public static Validator getValidator() {
 		if ( hibernateValidator == null ) {
-			HibernateValidatorFactoryBuilder builder = Validation
-					.builderType( HibernateValidatorFactoryBuilder.class )
-					.getBuilder();
-			hibernateValidator = builder.build().getValidator();
+			HibernateValidatorConfiguration configuration = Validation
+					.byProvider( HibernateValidatorConfiguration.class )
+					.configure();
+			hibernateValidator = configuration.buildValidatorFactory().getValidator();
 		}
 		return hibernateValidator;
 	}

Copied: validator/trunk/validation-api/src/main/java/javax/validation/Configuration.java (from rev 15818, validator/trunk/validation-api/src/main/java/javax/validation/ValidatorFactoryBuilder.java)
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/Configuration.java	                        (rev 0)
+++ validator/trunk/validation-api/src/main/java/javax/validation/Configuration.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -0,0 +1,110 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package javax.validation;
+
+import java.io.InputStream;
+
+/**
+ * Receives configuration information, selects the appropriate
+ * Bean Validation provider and build the appropriate
+ * ValidatorFactory.
+ * <p/>
+ * Usage:
+ * <pre>
+ * Configuration<?> configuration = //provided by one of the Validation bootstrap methods
+ *     ValidatorFactory = configuration
+ *         .messageInterpolator( new CustomMessageInterpolator() )
+ *         .buildValidatorFactory();
+ * </pre>
+ * <p/>
+ * The ValidationProviderResolver is specified at Configuration time
+ * (see {@link javax.validation.spi.ValidationProvider}).
+ * If none is explicitely requested, the default ValidationProviderResolver is used.
+ * <p/>
+ * The provider is selected in the following way:
+ * - if a specific Configuration subclass is requested programmatically using
+ * Validation.byProvider(Class), find the first provider matching it
+ * - if a specific Configuration subclass is defined in META-INF/validation.xml,
+ * find the first provider matching it
+ * - otherwise, use the first provider returned by the ValidationProviderResolver
+ * <p/>
+ * Implementations are not meant to be thread-safe
+ *
+ * @author Emmanuel Bernard
+ */
+public interface Configuration<T extends Configuration<T>> {
+	/**
+	 * Defines the message interpolator used. Has priority over the configuration
+	 * based message interpolator.
+	 *
+	 * @param interpolator message interpolator implementation.
+	 *
+	 * @return <code>this</code> following the chaining method pattern.
+	 */
+	T messageInterpolator(MessageInterpolator interpolator);
+
+	/**
+	 * Defines the traversable resolver used. Has priority over the configuration
+	 * based traversable resolver.
+	 *
+	 * @param resolver traversable resolver implementation.
+	 *
+	 * @return <code>this</code> following the chaining method pattern.
+	 */
+	T traversableResolver(TraversableResolver resolver);
+
+	/**
+	 * Defines the constraint validator factory. Has priority over the configuration
+	 * based constraint factory.
+	 *
+	 * @param constraintValidatorFactory constraint factory inmplementation.
+	 *
+	 * @return <code>this</code> following the chaining method pattern.
+	 */
+	T constraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory);
+
+	/**
+	 * Configure the ValidatorFactory based on <code>stream</code>
+	 * If not specified, META-INF/validation.xml is used
+	 * <p/>
+	 * The stream should be closed by the client API after the
+	 * ValidatorFactory has been returned
+	 *
+	 * @param stream configuration stream.
+	 *
+	 * @return <code>this</code> following the chaining method pattern.
+	 */
+	T customConfiguration(InputStream stream);
+
+	/**
+	 * Return an implementation of the MessageInterpolator interface following the
+	 * default MessageInterpolator defined in the specification:
+	 *  - use the ValidationMessages resource bundle to load keys
+	 *  - use Locale.getDefault()
+	 *
+	 * @return default MessageInterpolator implementation compliant with the specification
+	 */
+	MessageInterpolator getDefaultMessageInterpolator();
+
+	/**
+	 * Build a ValidatorFactory implementation.
+	 *
+	 * @return ValidatorFactory
+	 */
+	ValidatorFactory buildValidatorFactory();
+}


Property changes on: validator/trunk/validation-api/src/main/java/javax/validation/Configuration.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Id

Modified: validator/trunk/validation-api/src/main/java/javax/validation/Validation.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/Validation.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/validation-api/src/main/java/javax/validation/Validation.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -18,8 +18,8 @@
 package javax.validation;
 
 import javax.validation.bootstrap.DefaultValidationProviderResolver;
-import javax.validation.bootstrap.GenericBuilderFactory;
-import javax.validation.bootstrap.SpecializedBuilderFactory;
+import javax.validation.bootstrap.GenericBootstrap;
+import javax.validation.bootstrap.ProviderSpecificBootstrap;
 import javax.validation.spi.BootstrapState;
 import javax.validation.spi.ValidationProvider;
 
@@ -30,7 +30,7 @@
  * <li>
  * The easiest approach is to use the default Bean Validation provider.
  * <pre>
- * ValidatorFactory factory = Validation.getBuilder().build();
+ * ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
  * </pre>
  * In this case {@link  javax.validation.bootstrap.DefaultValidationProviderResolver}
  * will be used to locate available providers.
@@ -49,11 +49,11 @@
  * <code>ValidationProvider</code> is then determined in the same way
  * as in the default bootstrapping case (see above).
  * <pre>
- * ValidatorFactoryBuilder&lt?&gt; builder = Validation
- *    .defineBootstrapState()
+ * Configuration&lt?&gt; configuration = Validation
+ *    .byDefaultProvider()
  *    .providerResolver( new MyResolverStrategy() )
- *    .getBuilder();
- * ValidatorFactory factory = builder.build();
+ *    .configure();
+ * ValidatorFactory factory = configuration.buildValidatorFactory();
  * </pre>
  * </li>
  * 
@@ -61,15 +61,15 @@
  * <li>
  * The third approach allows you to specify explicitly and in
  * a type safe fashion the expected provider by
- * using its specific <code>ValidatorFactoryBuilder</code> sub-interface.
+ * using its specific <code>Configuration</code> sub-interface.
  *
  * Optionally you can choose a custom <code>ValidationProviderResolver</code>.
  * <pre>
- * ACMEValidatorFactoryBuilder builder = Validation
- *    .builderType(ACMEValidatorFactoryBuilder.class)
+ * ACMEConfiguration configuration = Validation
+ *    .byProvider(ACMEConfiguration.class)
  *    .providerResolver( new MyResolverStrategy() )  // optionally set the provider resolver
- *    .getBuilder();
- * ValidatorFactory factory = builder.build();
+ *    .configure();
+ * ValidatorFactory factory = configuration.buildValidatorFactory();
  * </pre>
  * </li>
  * </ul>
@@ -91,77 +91,78 @@
 public class Validation {
 
 	/**
-	 * Build a <code>ValidatorFactoryBuilder</code>. The actual provider
-	 * choice is given by the XML configuration. If the
-	 * XML configuration does not exsist the default is taken.
+	 * Build and return a ValidatorFactory instanced based on the
+	 * default Bean Validation provider and following the
+	 * XML configuration.
 	 * <p/>
 	 * The provider list is resolved using the
 	 * {@link  javax.validation.bootstrap.DefaultValidationProviderResolver}.
+	 * <p/> The code is semantically equivalent to
+	 * <code>Validation.byDefaultProvider().configure().buildValidatorFactory()</code>
 	 *
-	 * @return <code>ValidatorFactoryBuilder</code> instance.
+	 * @return <code>ValidatorFactory</code> instance.
 	 */
-	public static ValidatorFactoryBuilder<?> getBuilder() {
-		return defineBootstrapState().getBuilder();
+	public static ValidatorFactory buildDefaultValidatorFactory() {
+		return byDefaultProvider().configure().buildValidatorFactory();
 	}
 
 	/**
-	 * Build a <code>ValidatorFactoryBuilder</code>. The provider list is resolved
+	 * Build a <code>Configuration</code>. The provider list is resolved
 	 * using the strategy provided to the bootstrap state.
 	 * <pre>
-	 * ValidatorFactoryBuilder&lt?&gt; builder = Validation
-	 *    .defineBootstrapState()
+	 * Configuration&lt?&gt; configuration = Validation
+	 *    .byDefaultProvider()
 	 *    .providerResolver( new MyResolverStrategy() )
-	 *    .getBuilder();
-	 * ValidatorFactory factory = builder.build();
+	 *    .configure();
+	 * ValidatorFactory factory = configuration.buildValidatorFactory();
 	 * </pre>
 	 * The actual provider choice is given by the XML configuration. If the XML
 	 * configuration does not exsist the first available provider will be returned.
 	 *
-	 * @return instance building a generic <code>ValidatorFactoryBuilder</code>
+	 * @return instance building a generic <code>Configuration</code>
 	 * compliant with the bootstrap state provided.
 	 */
-	public static GenericBuilderFactory defineBootstrapState() {
-		return new GenericBuilderFactoryImpl();
+	public static GenericBootstrap byDefaultProvider() {
+		return new GenericBootstrapImpl();
 	}
 
 	/**
-	 * Build a <code>ValidatorFactoryBuilder</code> for a particular provider implementation.
+	 * Build a <code>Configuration</code> for a particular provider implementation.
 	 * Optionally override the provider resolution strategy used to determine the provider.
 	 * <p/>
 	 * Used by applications targeting a specific provider programmatically.
 	 * <p/>
 	 * <pre>
-	 * ACMEValidatorFactoryBuilder builder = 
-	 *     Validation.builderType(ACMEValidatorFactoryBuilder.class)
+	 * ACMEConfiguration configuration =
+	 *     Validation.byProvider(ACMEConfiguration.class)
 	 *             .providerResolver( new MyResolverStrategy() )
-	 *             .build();
+	 *             .configure();
 	 * </pre>,
-	 * where <code>ACMEValidatorFactoryBuilder</code> is the
-	 * <code>ValidatorFactoryBuilder</code> sub interface uniquely identifying the
+	 * where <code>ACMEConfiguration</code> is the
+	 * <code>Configuration</code> sub interface uniquely identifying the
 	 * ACME Bean Validation provider.
 	 *
-	 * @param builderType the <code>ValidatorFactoryBuilder</code> sub interface
+	 * @param configurationType the <code>Configuration</code> sub interface
 	 * uniquely defining the targeted provider.
 	 *
-	 * @return instance building a provider specific <code>ValidatorFactoryBuilder</code>
+	 * @return instance building a provider specific <code>Configuration</code>
 	 * sub interface implementation.
 	 *
-	 * @see #getBuilder()
 	 */
-	public static <T extends ValidatorFactoryBuilder<T>>
-	        SpecializedBuilderFactory<T> builderType(Class<T> builderType) {
-		return new SpecializedBuilderFactoryImpl<T>( builderType );
+	public static <T extends Configuration<T>>
+	ProviderSpecificBootstrap<T> byProvider(Class<T> configurationType) {
+		return new ProviderSpecificBootstrapImpl<T>( configurationType );
 	}
 
 	//private class, not exposed
-	private static class SpecializedBuilderFactoryImpl<T extends ValidatorFactoryBuilder<T>>
-			implements SpecializedBuilderFactory<T> {
+	private static class ProviderSpecificBootstrapImpl<T extends Configuration<T>>
+			implements ProviderSpecificBootstrap<T> {
 
-		private Class<T> builderType;
+		private Class<T> configurationType;
 		private ValidationProviderResolver resolver;
 
-		public SpecializedBuilderFactoryImpl(Class<T> builderType) {
-			this.builderType = builderType;
+		public ProviderSpecificBootstrapImpl(Class<T> configurationType) {
+			this.configurationType = configurationType;
 		}
 
 		/**
@@ -172,43 +173,43 @@
 		 *
 		 * @return self
 		 */
-		public SpecializedBuilderFactory<T> providerResolver(ValidationProviderResolver resolver) {
+		public ProviderSpecificBootstrap<T> providerResolver(ValidationProviderResolver resolver) {
 			this.resolver = resolver;
 			return this;
 		}
 
 		/**
-		 * Determine the provider implementation suitable for builderType and delegate the creation
-		 * of this specific ValidatorFactoryBuilder subclass to the provider.
+		 * Determine the provider implementation suitable for byProvider(Class)
+		 * and delegate the creation of this specific Configuration subclass to the provider.
 		 *
-		 * @return a ValidatorFactoryBuilder sub interface implementation
+		 * @return a Configuration sub interface implementation
 		 */
-		public T getBuilder() {
-			if ( builderType == null ) {
+		public T configure() {
+			if ( configurationType == null ) {
 				throw new ValidationException(
-						"builder is mandatory. Use getBuilder() to use the generic provider discovery mechanism"
+						"builder is mandatory. Use Validation.byDefaultProvider() to use the generic provider discovery mechanism"
 				);
 			}
 			if ( resolver == null ) {
 				resolver = new DefaultValidationProviderResolver();
 			}
 			for ( ValidationProvider provider : resolver.getValidationProviders() ) {
-				if ( provider.isSuitable( builderType ) ) {
-					GenericBuilderFactoryImpl state = new GenericBuilderFactoryImpl();
+				if ( provider.isSuitable( configurationType ) ) {
+					GenericBootstrapImpl state = new GenericBootstrapImpl();
 					state.providerResolver( resolver );
-					return provider.createSpecializedValidatorFactoryBuilder( state, builderType );
+					return provider.createSpecializedConfiguration( state, configurationType );
 				}
 			}
-			throw new ValidationException( "Unable to find provider: " + builderType );
+			throw new ValidationException( "Unable to find provider: " + configurationType );
 		}
 	}
 
 	//private class, not exposed
-	private static class GenericBuilderFactoryImpl implements GenericBuilderFactory, BootstrapState {
+	private static class GenericBootstrapImpl implements GenericBootstrap, BootstrapState {
 
 		private ValidationProviderResolver resolver;
 
-		public GenericBuilderFactory providerResolver(ValidationProviderResolver resolver) {
+		public GenericBootstrap providerResolver(ValidationProviderResolver resolver) {
 			this.resolver = resolver;
 			return this;
 		}
@@ -217,7 +218,7 @@
 			return resolver;
 		}
 
-		public ValidatorFactoryBuilder<?> getBuilder() {
+		public Configuration<?> configure() {
 			ValidationProviderResolver resolver = this.resolver == null ?
 					new DefaultValidationProviderResolver() :
 					this.resolver;
@@ -226,7 +227,7 @@
 				//FIXME looks like an assertion error almost
 				throw new ValidationException( "Unable to find a default provider" );
 			}
-			return resolver.getValidationProviders().get( 0 ).createGenericValidatorFactoryBuilder( this );
+			return resolver.getValidationProviders().get( 0 ).createGenericConfiguration( this );
 		}
 	}
 }

Deleted: validator/trunk/validation-api/src/main/java/javax/validation/ValidatorFactoryBuilder.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/ValidatorFactoryBuilder.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/validation-api/src/main/java/javax/validation/ValidatorFactoryBuilder.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -1,110 +0,0 @@
-// $Id$
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-* http://www.apache.org/licenses/LICENSE-2.0
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package javax.validation;
-
-import java.io.InputStream;
-
-/**
- * Receives configuration information, selects the appropriate
- * Bean Validation provider and build the appropriate
- * ValidatorFactory.
- * <p/>
- * Usage:
- * <pre>
- * ValidatorFactoryBuilder<?> builder = //provided by one of the Validation bootstrap methods
- * ValidatorFactory = builder
- *         .messageInterpolator( new CustomMessageInterpolator() )
- *         .build();
- * </pre>
- * <p/>
- * The ValidationProviderResolver is specified at ValidatorFactoryBuilder time
- * (see {@link javax.validation.spi.ValidationProvider}).
- * If none is explicitely requested, the default ValidationProviderResolver is used.
- * <p/>
- * The provider is selected in the following way:
- * - if a specific ValidatorFactoryBuilder subclass is requested programmatically using
- * Validation.builderType(), find the first provider matching it
- * - if a specific ValidatorFactoryBuilder subclass is defined in META-INF/validation.xml,
- * find the first provider matching it
- * - otherwise, use the first provider returned by the ValidationProviderResolver
- * <p/>
- * Implementations are not meant to be thread-safe
- *
- * @author Emmanuel Bernard
- */
-public interface ValidatorFactoryBuilder<T extends ValidatorFactoryBuilder> {
-	/**
-	 * Defines the message interpolator used. Has priority over the configuration
-	 * based message interpolator.
-	 *
-	 * @param interpolator message interpolator implementation.
-	 *
-	 * @return <code>this</code> following the chaining method pattern.
-	 */
-	T messageInterpolator(MessageInterpolator interpolator);
-
-	/**
-	 * Defines the traversable resolver used. Has priority over the configuration
-	 * based traversable resolver.
-	 *
-	 * @param resolver traversable resolver implementation.
-	 *
-	 * @return <code>this</code> following the chaining method pattern.
-	 */
-	T traversableResolver(TraversableResolver resolver);
-
-	/**
-	 * Defines the constraint validator factory. Has priority over the configuration
-	 * based constraint factory.
-	 *
-	 * @param constraintValidatorFactory constraint factory inmplementation.
-	 *
-	 * @return <code>this</code> following the chaining method pattern.
-	 */
-	T constraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory);
-
-	/**
-	 * Configure the ValidatorFactory based on <code>stream</code>
-	 * If not specified, META-INF/validation.xml is used
-	 * <p/>
-	 * The stream should be closed by the client API after the
-	 * ValidatorFactory has been returned
-	 *
-	 * @param stream configuration stream.
-	 *
-	 * @return <code>this</code> following the chaining method pattern.
-	 */
-	T configure(InputStream stream);
-
-	/**
-	 * Return an implementation of the MessageInterpolator interface following the
-	 * default MessageInterpolator defined in the specification:
-	 *  - use the ValidationMessages resource bundle to load keys
-	 *  - use Locale.getDefault()
-	 *
-	 * @return default MessageInterpolator implementation compliant with the specification
-	 */
-	MessageInterpolator getDefaultMessageInterpolator();
-
-	/**
-	 * Build a ValidatorFactory implementation.
-	 *
-	 * @return ValidatorFactory
-	 */
-	ValidatorFactory build();
-}

Copied: validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBootstrap.java (from rev 15817, validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBuilderFactory.java)
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBootstrap.java	                        (rev 0)
+++ validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBootstrap.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -0,0 +1,35 @@
+package javax.validation.bootstrap;
+
+import javax.validation.ValidationProviderResolver;
+import javax.validation.Configuration;
+
+/**
+ * Defines the state used to bootstrap Bean Validation and
+ * creates a provider agnostic Configuration.
+ *
+ * @author Emmanuel Bernard
+ */
+public interface GenericBootstrap {
+	/**
+	 * Defines the provider resolution strategy.
+	 * This resolver returns the list of providers evaluated
+	 * to build the Configuration
+	 * <p/>
+	 * If no resolver is defined, the default ValidationProviderResolver
+	 * implementation is used.
+	 *
+	 * @return <code>this</code> following the chaining method pattern
+	 */
+	GenericBootstrap providerResolver(ValidationProviderResolver resolver);
+
+	/**
+	 * Returns a generic Configuration implementation.
+	 * At this stage the provider used to build the ValidatorFactory is not defined.
+	 * <p/>
+	 * The Configuration implementation is provided by the first provider returned
+	 * by the ValidationProviderResolver strategy.
+	 *
+	 * @return a Configuration implementation compliant with the bootstrap state
+	 */
+	Configuration<?> configure();
+}


Property changes on: validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBootstrap.java
___________________________________________________________________
Name: svn:keywords
   + Id

Deleted: validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBuilderFactory.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBuilderFactory.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/GenericBuilderFactory.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -1,35 +0,0 @@
-package javax.validation.bootstrap;
-
-import javax.validation.ValidationProviderResolver;
-import javax.validation.ValidatorFactoryBuilder;
-
-/**
- * Defines the state used to bootstrap Bean Validation and create an appropriate
- * ValidatorFactoryBuilder
- *
- * @author Emmanuel Bernard
- */
-public interface GenericBuilderFactory {
-	/**
-	 * Defines the provider resolution strategy.
-	 * This resolver returns the list of providers evaluated
-	 * to build the ValidatorFactoryBuilder
-	 * <p/>
-	 * If no resolver is defined, the default ValidationProviderResolver
-	 * implementation is used.
-	 *
-	 * @return <code>this</code> following the chaining method pattern
-	 */
-	GenericBuilderFactory providerResolver(ValidationProviderResolver resolver);
-
-	/**
-	 * Returns a generic ValidatorFactoryBuilder implementation.
-	 * At this stage the provider used to build the ValidatorFactory is not defined.
-	 * <p/>
-	 * The ValidatorFactoryBuilder implementation is provided by the first provider returned
-	 * by the ValidationProviderResolver strategy.
-	 *
-	 * @return a ValidatorFactoryBuilder implementation compliant with the bootstrap state
-	 */
-	ValidatorFactoryBuilder<?> getBuilder();
-}

Copied: validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java (from rev 15817, validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/SpecializedBuilderFactory.java)
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java	                        (rev 0)
+++ validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -0,0 +1,38 @@
+package javax.validation.bootstrap;
+
+import javax.validation.ValidationProviderResolver;
+import javax.validation.Configuration;
+
+/**
+ * Defines the state used to bootstrap Bean Validation and
+ * creates a provider specific Configuration. The specific Configuration
+ * sub interface uniquely identifying a provider.
+ * <p/>
+ * The requested provider is the first provider suitable for T (as defined in
+ * {@link javax.validation.spi.ValidationProvider#isSuitable(Class)}). The
+ * list of providers evaluated is returned by {@link ValidationProviderResolver}.
+ * If no ValidationProviderResolver is defined, the
+ * default ValidationProviderResolver strategy is used.
+ *
+ * @author Emmanuel Bernard
+ */
+public interface ProviderSpecificBootstrap<T extends Configuration<T>> {
+
+	/**
+	 * Optionally define the provider resolver implementation used.
+	 * If not defined, use the default ValidationProviderResolver
+	 *
+	 * @param resolver ValidationProviderResolver implementation used
+	 *
+	 * @return self
+	 */
+	public ProviderSpecificBootstrap<T> providerResolver(ValidationProviderResolver resolver);
+
+	/**
+	 * Determine the provider implementation suitable for configurationType and delegate
+	 * the creation of this specific Configuration subclass to the provider.
+	 *
+	 * @return a Configuration sub interface implementation
+	 */
+	public T configure();
+}


Property changes on: validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java
___________________________________________________________________
Name: svn:keywords
   + Id

Deleted: validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/SpecializedBuilderFactory.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/SpecializedBuilderFactory.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/validation-api/src/main/java/javax/validation/bootstrap/SpecializedBuilderFactory.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -1,37 +0,0 @@
-package javax.validation.bootstrap;
-
-import javax.validation.ValidationProviderResolver;
-import javax.validation.ValidatorFactoryBuilder;
-
-/**
- * Build implementations of builderType, the specific ValidatorFactoryBuilder
- * sub interface uniquely identifying a provider.
- * <p/>
- * The requested provider is the first provider suitable for T (as defined in
- * {@link javax.validation.spi.ValidationProvider#isSuitable(Class)}). The
- * list of providers evaluated is returned by {@link ValidationProviderResolver}.
- * If no ValidationProviderResolver is defined, the
- * default ValidationProviderResolver strategy is used.
- *
- * @author Emmanuel Bernard
- */
-public interface SpecializedBuilderFactory<T extends ValidatorFactoryBuilder<T>> {
-
-	/**
-	 * Optionally define the provider resolver implementation used.
-	 * If not defined, use the default ValidationProviderResolver
-	 *
-	 * @param resolver ValidationProviderResolver implementation used
-	 *
-	 * @return self
-	 */
-	public SpecializedBuilderFactory<T> providerResolver(ValidationProviderResolver resolver);
-
-	/**
-	 * Determine the provider implementation suitable for builderType and delegate
-	 * the creation of this specific ValidatorFactoryBuilder subclass to the provider.
-	 *
-	 * @return a ValidatorFactoryBuilder sub interface implementation
-	 */
-	public T getBuilder();
-}

Modified: validator/trunk/validation-api/src/main/java/javax/validation/spi/BootstrapState.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/spi/BootstrapState.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/validation-api/src/main/java/javax/validation/spi/BootstrapState.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -3,7 +3,7 @@
 import javax.validation.ValidationProviderResolver;
 
 /**
- * Defines the state used to bootstrap the ValidatorFactoryBuilder
+ * Defines the state used to bootstrap the Configuration
  *
  * @author Emmanuel Bernard
  */

Copied: validator/trunk/validation-api/src/main/java/javax/validation/spi/ConfigurationState.java (from rev 15818, validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidatorFactoryConfiguration.java)
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/spi/ConfigurationState.java	                        (rev 0)
+++ validator/trunk/validation-api/src/main/java/javax/validation/spi/ConfigurationState.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -0,0 +1,66 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package javax.validation.spi;
+
+import java.io.InputStream;
+import javax.validation.ConstraintValidatorFactory;
+import javax.validation.MessageInterpolator;
+import javax.validation.TraversableResolver;
+
+/**
+ * Contract between a <code>Configuration</code> and a
+ * </code>ValidatorProvider</code> to create a <code>ValidatorFactory</code>.
+ * The configuration artifacts provided to the
+ * <code>Configuration</code> are passed along.
+ *
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+public interface ConfigurationState {
+	/**
+	 * Message interpolator as defined by the client programmatically
+	 * or null if undefined.
+	 *
+	 * @return message provider instance or null if not defined
+	 */
+	MessageInterpolator getMessageInterpolator();
+
+	/**
+	 * Returns the configuration stream defined by the client programmatically
+	 * or null if undefined.
+	 *
+	 * @return the configuration input stream or null
+	 */
+	InputStream getConfigurationStream();
+
+	/**
+	 * Defines the constraint validator implementation factory as defined by
+	 * the client programmatically or null if undefined
+	 *
+	 * @return factory instance or null if not defined
+	 */
+	ConstraintValidatorFactory getConstraintValidatorFactory();
+
+	/**
+	 * Traversable resolver as defined by the client programmatically
+	 * or null if undefined.
+	 *
+	 * @return traversable provider instance or null if not defined
+	 */
+	TraversableResolver getTraversableResolver();
+}


Property changes on: validator/trunk/validation-api/src/main/java/javax/validation/spi/ConfigurationState.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Id

Modified: validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidationProvider.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidationProvider.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidationProvider.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -17,7 +17,7 @@
 */
 package javax.validation.spi;
 
-import javax.validation.ValidatorFactoryBuilder;
+import javax.validation.Configuration;
 import javax.validation.ValidatorFactory;
 
 /**
@@ -33,56 +33,56 @@
 	/**
 	 * This sub interface uniquely identify a provider.
 	 * 
-	 * @param builderClass targeted builder class.
+	 * @param configurationClass targeted configuration class.
 	 *
-	 * @return <code>true</code> if <code>builderClass</code> is the Bean Validation Provider
-	 *         sub-interface for ValidatorFactoryBuilder
+	 * @return <code>true</code> if <code>configurationClass</code> is the Bean Validation Provider
+	 *         sub-interface for Configuration
 	 */
-	boolean isSuitable(Class<? extends ValidatorFactoryBuilder<?>> builderClass);
+	boolean isSuitable(Class<? extends Configuration<?>> configurationClass);
 
 	/**
-	 * Returns a ValidatorFactoryBuilder instance implementing the
-	 * <code>builderType</code> interface.
-	 * The ValidatorFactoryBuilder instance uses the current provider (<code>this</code>)
+	 * Returns a Configuration instance implementing the
+	 * <code>configurationClass</code> interface.
+	 * The Configuration instance uses the current provider (<code>this</code>)
 	 * to build the ValidatorFactory instance.
 	 * <p/>
-	 * This method can only be called on providers returning true on <
-	 * code>#isSuitable(builderType)</code>
+	 * This method can only be called on providers returning true on
+	 * <code>#isSuitable(configurationClass)</code>
 	 *
-	 * @param builderClass the Builder class type
+	 * @param configurationClass the Configuration class type
 	 * @param state bootstrap state
 	 *
-	 * @return specific validator builder implementation
+	 * @return specific Configuration implementation
 	 */
-	<T extends ValidatorFactoryBuilder<T>> T createSpecializedValidatorFactoryBuilder(
+	<T extends Configuration<T>> T createSpecializedConfiguration(
 			BootstrapState state,
-			Class<T> builderClass);
+			Class<T> configurationClass);
 
 	/**
-	 * Returns a ValidatorFactoryBuilder instance. This instance is not bound to
+	 * Returns a Configuration instance. This instance is not bound to
 	 * use the current provider. The choice of provider follows the algorithm described
-	 * in {@link javax.validation.ValidatorFactoryBuilder}
+	 * in {@link javax.validation.Configuration}
 	 * <p/>
 	 * The ValidationProviderResolver used is provided by <code>state</code>.
 	 * If null, the default ValidationProviderResolver is used.
 	 *
 	 * @param state bootstrap state
 	 *
-	 * @return validator builder implementation
+	 * @return Configuration implementation
 	 */
-	ValidatorFactoryBuilder<?> createGenericValidatorFactoryBuilder(BootstrapState state);
+	Configuration<?> createGenericConfiguration(BootstrapState state);
 
 	/**
 	 * Build a ValidatorFactory using the current provider implementation. The
 	 * ValidatorFactory is assembled and follow the configuration passed
-	 * using ValidatorFactoryConfiguration.
+	 * using ConfigurationState.
 	 * <p>
 	 * The returned ValidatorFactory is properly initialized and ready for use.
 	 * </p>
 	 *
-	 * @param configuration the configuration descriptor
+	 * @param configurationState the configuration descriptor
 	 *
 	 * @return the instanciated ValidatorFactory
 	 */
-	ValidatorFactory buildValidatorFactory(ValidatorFactoryConfiguration configuration);
+	ValidatorFactory buildValidatorFactory(ConfigurationState configurationState);
 }
\ No newline at end of file

Deleted: validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidatorFactoryConfiguration.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidatorFactoryConfiguration.java	2009-01-26 20:32:36 UTC (rev 15822)
+++ validator/trunk/validation-api/src/main/java/javax/validation/spi/ValidatorFactoryConfiguration.java	2009-01-27 01:13:37 UTC (rev 15823)
@@ -1,66 +0,0 @@
-// $Id$
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-* http://www.apache.org/licenses/LICENSE-2.0
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package javax.validation.spi;
-
-import java.io.InputStream;
-import javax.validation.ConstraintValidatorFactory;
-import javax.validation.MessageInterpolator;
-import javax.validation.TraversableResolver;
-
-/**
- * Contract between a <code>ValidatorFactoryBuilder</code> and a
- * </code>ValidatorProvider</code> to create a <code>ValidatorFactory</code>.
- * The configuration artifacts provided to the
- * <code>ValidatorFactoryBuilder</code> are passed along.
- *
- * @author Emmanuel Bernard
- * @author Hardy Ferentschik
- */
-public interface ValidatorFactoryConfiguration {
-	/**
-	 * Message interpolator as defined by the client programmatically
-	 * or null if undefined.
-	 *
-	 * @return message provider instance or null if not defined
-	 */
-	MessageInterpolator getMessageInterpolator();
-
-	/**
-	 * Returns the configuration stream defined by the client programmatically
-	 * or null if undefined.
-	 *
-	 * @return the configuration input stream or null
-	 */
-	InputStream getConfigurationStream();
-
-	/**
-	 * Defines the constraint validator implementation factory as defined by
-	 * the client programmatically or null if undefined
-	 *
-	 * @return factory instance or null if not defined
-	 */
-	ConstraintValidatorFactory getConstraintValidatorFactory();
-
-	/**
-	 * Traversable resolver as defined by the client programmatically
-	 * or null if undefined.
-	 *
-	 * @return traversable provider instance or null if not defined
-	 */
-	TraversableResolver getTraversableResolver();
-}




More information about the hibernate-commits mailing list