1 /*
2  * Hibernate Validator, declare and validate application constraints
3  *
4  * License: Apache License, Version 2.0
5  * See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
6  */

7 package org.hibernate.validator.internal.engine.constraintvalidation;
8
9 import java.lang.annotation.Annotation;
10 import java.lang.invoke.MethodHandles;
11 import java.lang.reflect.Type;
12 import java.util.Collection;
13
14 import javax.validation.ConstraintValidator;
15
16 import org.hibernate.validator.internal.engine.validationcontext.ValidationContext;
17 import org.hibernate.validator.internal.engine.valuecontext.ValueContext;
18 import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl;
19 import org.hibernate.validator.internal.util.logging.Log;
20 import org.hibernate.validator.internal.util.logging.LoggerFactory;
21
22 /**
23  * A constraint tree for a simple constraint i.e. not a composing one.
24  *
25  * @author Hardy Ferentschik
26  * @author Federico Mancini
27  * @author Dag Hovland
28  * @author Kevin Pollet &lt;kevin.pollet@serli.com&gt; (C) 2012 SERLI
29  * @author Guillaume Smet
30  * @author Marko Bekhta
31  */

32 class SimpleConstraintTree<B extends Annotation> extends ConstraintTree<B> {
33
34     private static final Log LOG = LoggerFactory.make( MethodHandles.lookup() );
35
36     public SimpleConstraintTree(ConstraintValidatorManager constraintValidatorManager, ConstraintDescriptorImpl<B> descriptor, Type validatedValueType) {
37         super( constraintValidatorManager, descriptor, validatedValueType );
38     }
39
40     @Override
41     protected void validateConstraints(ValidationContext<?> validationContext,
42             ValueContext<?, ?> valueContext,
43             Collection<ConstraintValidatorContextImpl> violatedConstraintValidatorContexts) {
44
45         if ( LOG.isTraceEnabled() ) {
46             LOG.tracef(
47                     "Validating value %s against constraint defined by %s.",
48                     valueContext.getCurrentValidatedValue(),
49                     descriptor
50             );
51         }
52
53         // find the right constraint validator
54         ConstraintValidator<B, ?> validator = getInitializedConstraintValidator( validationContext, valueContext );
55
56         // create a constraint validator context
57         ConstraintValidatorContextImpl constraintValidatorContext = validationContext.createConstraintValidatorContextFor(
58                 descriptor, valueContext.getPropertyPath()
59         );
60
61         // validate
62         if ( validateSingleConstraint( valueContext, constraintValidatorContext, validator ).isPresent() ) {
63             violatedConstraintValidatorContexts.add( constraintValidatorContext );
64         }
65     }
66 }
67