-
Notifications
You must be signed in to change notification settings - Fork 566
/
NonContainerCascadingMetaData.java
118 lines (97 loc) · 3.41 KB
/
NonContainerCascadingMetaData.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.internal.metadata.aggregated;
import java.lang.reflect.TypeVariable;
import java.util.Collections;
import java.util.Set;
import javax.validation.metadata.GroupConversionDescriptor;
import org.hibernate.validator.internal.engine.valueextraction.AnnotatedObject;
import org.hibernate.validator.internal.util.logging.Log;
import org.hibernate.validator.internal.util.logging.LoggerFactory;
/**
* A simplified view of the cascading validation metadata for a non container element.
*
* @author Guillaume Smet
*/
public class NonContainerCascadingMetaData implements CascadingMetaData {
private static final Log LOG = LoggerFactory.make();
private static final NonContainerCascadingMetaData NON_CASCADING = new NonContainerCascadingMetaData( false,
GroupConversionHelper.of( Collections.emptyMap() ) );
private static final NonContainerCascadingMetaData CASCADING_WITHOUT_GROUP_CONVERSIONS = new NonContainerCascadingMetaData( true,
GroupConversionHelper.of( Collections.emptyMap() ) );
/**
* If this type parameter is marked for cascading.
*/
private final boolean cascading;
/**
* The group conversions defined for this type parameter.
*/
private GroupConversionHelper groupConversionHelper;
public static NonContainerCascadingMetaData of(CascadingMetaDataBuilder cascadingMetaDataBuilder, Object context) {
if ( !cascadingMetaDataBuilder.isCascading() ) {
return NON_CASCADING;
}
else if ( cascadingMetaDataBuilder.getGroupConversions().isEmpty() ) {
return CASCADING_WITHOUT_GROUP_CONVERSIONS;
}
else {
return new NonContainerCascadingMetaData( cascadingMetaDataBuilder );
}
}
private NonContainerCascadingMetaData(CascadingMetaDataBuilder cascadingMetaDataBuilder) {
this(
cascadingMetaDataBuilder.isCascading(),
GroupConversionHelper.of( cascadingMetaDataBuilder.getGroupConversions() )
);
}
private NonContainerCascadingMetaData(boolean cascading, GroupConversionHelper groupConversionHelper) {
this.cascading = cascading;
this.groupConversionHelper = groupConversionHelper;
}
@Override
public TypeVariable<?> getTypeParameter() {
return AnnotatedObject.INSTANCE;
}
@Override
public boolean isCascading() {
return cascading;
}
@Override
public boolean isMarkedForCascadingOnAnnotatedObjectOrContainerElements() {
return cascading;
}
@Override
public Class<?> convertGroup(Class<?> originalGroup) {
return groupConversionHelper.convertGroup( originalGroup );
}
@Override
public Set<GroupConversionDescriptor> getGroupConversionDescriptors() {
return groupConversionHelper.asDescriptors();
}
@Override
public boolean isContainer() {
return false;
}
@Override
@SuppressWarnings("unchecked")
public <T extends CascadingMetaData> T as(Class<T> clazz) {
if ( clazz.isAssignableFrom( getClass() ) ) {
return (T) this;
}
throw LOG.getUnableToCastException( this, clazz );
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append( getClass().getSimpleName() );
sb.append( " [" );
sb.append( "cascading=" ).append( cascading ).append( ", " );
sb.append( "groupConversions=" ).append( groupConversionHelper ).append( ", " );
sb.append( "]" );
return sb.toString();
}
}