package org.apache.wicket.bean.validation;

import java.util.function.Supplier;

import javax.validation.Configuration;
import javax.validation.MessageInterpolator;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;


/**
 * This is the default validator provider. It creates a validator instance with the default message
 * interpolator wrapped inside a {@link SessionLocaleInterpolator} so it is aware of Wicket's
 * locale. Only one instance of the {@link Validator} is created.
 * 
 * @author igor
 * 
 */
public class DefaultValidatorProvider implements Supplier<Validator>
{

	private Validator validator;

	@Override
	public Validator get()
	{
		if (validator == null)
		{
			Configuration<?> config = Validation.byDefaultProvider().configure();

			MessageInterpolator interpolator = config.getDefaultMessageInterpolator();
			interpolator = new SessionLocaleInterpolator(interpolator);

			ValidatorFactory factory = config.messageInterpolator(interpolator)
				.buildValidatorFactory();

			validator = factory.getValidator();
		}
		return validator;
	}
}
