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.metadata.raw;
8
9 import java.util.List;
10 import java.util.Set;
11
12 import org.hibernate.validator.internal.util.CollectionHelper;
13 import org.hibernate.validator.spi.group.DefaultGroupSequenceProvider;
14
15 /**
16  * Represents the complete constraint related configuration of one Java type
17  * originating from one {@link ConfigurationSource}. Contains meta-data on
18  * constraints (field, method and class level) as well as meta data on default
19  * group sequences.
20  *
21  * @author Gunnar Morling
22  */

23 public class BeanConfiguration<T> {
24
25     private final ConfigurationSource source;
26
27     private final Class<T> beanClass;
28
29     private final Set<ConstrainedElement> constrainedElements;
30
31     private final List<Class<?>> defaultGroupSequence;
32
33     private final DefaultGroupSequenceProvider<? super T> defaultGroupSequenceProvider;
34
35     /**
36      * Creates a new bean configuration.
37      *
38      * @param source The source of this configuration.
39      * @param beanClass The type represented by this configuration.
40      * @param constrainedElements The constraint elements representing this type's fields,
41      * methods etc.
42      * @param defaultGroupSequence The default group sequence for the given type as configured by
43      * the given configuration source.
44      * @param defaultGroupSequenceProvider The default group sequence provider for the given type as
45      * configured by the given configuration source.
46      */

47     public BeanConfiguration(
48             ConfigurationSource source,
49             Class<T> beanClass,
50             Set<? extends ConstrainedElement> constrainedElements,
51             List<Class<?>> defaultGroupSequence,
52             DefaultGroupSequenceProvider<? super T> defaultGroupSequenceProvider) {
53
54         this.source = source;
55         this.beanClass = beanClass;
56         this.constrainedElements = CollectionHelper.<ConstrainedElement>newHashSet( constrainedElements );
57         this.defaultGroupSequence = defaultGroupSequence;
58         this.defaultGroupSequenceProvider = defaultGroupSequenceProvider;
59     }
60
61     public ConfigurationSource getSource() {
62         return source;
63     }
64
65     public Class<T> getBeanClass() {
66         return beanClass;
67     }
68
69     public Set<ConstrainedElement> getConstrainedElements() {
70         return constrainedElements;
71     }
72
73     public List<Class<?>> getDefaultGroupSequence() {
74         return defaultGroupSequence;
75     }
76
77     public DefaultGroupSequenceProvider<? super T> getDefaultGroupSequenceProvider() {
78         return defaultGroupSequenceProvider;
79     }
80
81     @Override
82     public String toString() {
83         return "BeanConfiguration [beanClass=" + beanClass.getSimpleName()
84                 + ", source=" + source
85                 + ", constrainedElements=" + constrainedElements
86                 + ", defaultGroupSequence=" + defaultGroupSequence
87                 + ", defaultGroupSequenceProvider="
88                 + defaultGroupSequenceProvider + "]";
89     }
90
91     @Override
92     public int hashCode() {
93         final int prime = 31;
94         int result = 1;
95         result = prime * result
96                 + ( ( beanClass == null ) ? 0 : beanClass.hashCode() );
97         result = prime * result + ( ( source == null ) ? 0 : source.hashCode() );
98         return result;
99     }
100
101     @Override
102     public boolean equals(Object obj) {
103         if ( this == obj ) {
104             return true;
105         }
106         if ( obj == null ) {
107             return false;
108         }
109         if ( getClass() != obj.getClass() ) {
110             return false;
111         }
112         BeanConfiguration<?> other = (BeanConfiguration<?>) obj;
113         if ( beanClass == null ) {
114             if ( other.beanClass != null ) {
115                 return false;
116             }
117         }
118         else if ( !beanClass.equals( other.beanClass ) ) {
119             return false;
120         }
121         if ( source != other.source ) {
122             return false;
123         }
124         return true;
125     }
126
127 }
128