package org.jboss.resteasy.plugins.validation;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.MessageInterpolator;
import javax.validation.ValidationException;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.executable.ExecutableType;
import javax.validation.executable.ValidateOnExecution;
import org.jboss.resteasy.api.validation.ResteasyConstraintViolation;
import org.jboss.resteasy.api.validation.ConstraintType.Type;
import org.jboss.resteasy.api.validation.ResteasyViolationException;
import org.jboss.resteasy.plugins.providers.validation.ConstraintTypeUtil;
import org.jboss.resteasy.plugins.providers.validation.ViolationsContainer;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.spi.validation.GeneralValidator;
import com.fasterxml.classmate.Filter;
import com.fasterxml.classmate.MemberResolver;
import com.fasterxml.classmate.ResolvedType;
import com.fasterxml.classmate.ResolvedTypeWithMembers;
import com.fasterxml.classmate.TypeResolver;
import com.fasterxml.classmate.members.RawMethod;
import com.fasterxml.classmate.members.ResolvedMethod;
/**
*
* @author Ron Sigal
* @version $Revision: 1.1 $
*
* Copyright May 23, 2013
*/
public class GeneralValidatorImpl implements GeneralValidator
{
/**
* Used for resolving type parameters. Thread-safe.
*/
private TypeResolver typeResolver = new TypeResolver();
private ValidatorFactory validatorFactory;
private Validator defaultValidator;
private Map validators = new HashMap();
private Locale.Builder localeBuilder = new Locale.Builder();
private ConstraintTypeUtil util = new ConstraintTypeUtil11();
private boolean isExecutableValidationEnabled;
private ExecutableType[] defaultValidatedExecutableTypes;
public GeneralValidatorImpl(ValidatorFactory validatorFactory, boolean isExecutableValidationEnabled, Set defaultValidatedExecutableTypes)
{
this.validatorFactory = validatorFactory;
this.isExecutableValidationEnabled = isExecutableValidationEnabled;
this.defaultValidatedExecutableTypes = defaultValidatedExecutableTypes.toArray(new ExecutableType[]{});
}
@Override
public void validate(HttpRequest request, Object object, Class>... groups)
{
installValidator(request);
Set rcvs = new HashSet();
try
{
Set> cvs = getValidator(request).validate(object, groups);
for (Iterator> it = cvs.iterator(); it.hasNext(); )
{
ConstraintViolation