1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.extensions.validator.beanval.metadata.transformer;
20
21 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
22 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
23 import org.apache.myfaces.extensions.validator.core.metadata.transformer.MetaDataTransformer;
24 import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
25 import org.apache.myfaces.extensions.validator.beanval.payload.ViolationSeverity;
26 import org.apache.myfaces.extensions.validator.beanval.payload.DisableClientSideValidation;
27 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
28
29 import javax.validation.metadata.ConstraintDescriptor;
30 import javax.validation.Payload;
31 import javax.faces.application.FacesMessage;
32 import java.util.Map;
33 import java.util.Collections;
34 import java.lang.annotation.Annotation;
35
36
37
38
39
40 @UsageInformation({UsageCategory.REUSE})
41 public abstract class AbstractBeanValidationMetaDataTransformer<T extends Annotation> implements MetaDataTransformer
42 {
43 @SuppressWarnings({"unchecked"})
44 public Map<String, Object> convertMetaData(MetaDataEntry metaDataEntry)
45 {
46 ConstraintDescriptor<? extends T> constraintDescriptor = metaDataEntry.getValue(ConstraintDescriptor.class);
47
48 if(isClientSideValidationEnabled(constraintDescriptor) && isBlockingConstraint(constraintDescriptor))
49 {
50 return transformMetaData((ConstraintDescriptor<T>)constraintDescriptor);
51 }
52 return Collections.emptyMap();
53 }
54
55 protected boolean isClientSideValidationEnabled(ConstraintDescriptor<? extends T> constraintDescriptor)
56 {
57 return !constraintDescriptor.getPayload().contains(
58 ExtValUtils.getValidationParameterClassFor(DisableClientSideValidation.class));
59 }
60
61 protected boolean isBlockingConstraint(ConstraintDescriptor<?> constraintDescriptor)
62 {
63 FacesMessage testMessage = new FacesMessage();
64 testMessage.setSeverity(ViolationSeverity.Error.VALUE);
65
66 for (Class<? extends Payload> payload : constraintDescriptor.getPayload())
67 {
68 if (ExtValUtils.getValidationParameterClassFor(ViolationSeverity.Warn.class).isAssignableFrom(payload))
69 {
70 testMessage.setSeverity(ViolationSeverity.Warn.VALUE);
71 }
72 else if(ExtValUtils.getValidationParameterClassFor(ViolationSeverity.Info.class).isAssignableFrom(payload))
73 {
74 testMessage.setSeverity(ViolationSeverity.Info.VALUE);
75 }
76 else if(ExtValUtils.getValidationParameterClassFor(ViolationSeverity.Fatal.class).isAssignableFrom(payload))
77 {
78 testMessage.setSeverity(ViolationSeverity.Fatal.VALUE);
79 }
80 }
81 return ExtValUtils.severityBlocksSubmitForComponentId(null, testMessage);
82 }
83 protected abstract Map<String, Object> transformMetaData(ConstraintDescriptor<T> constraintDescriptor);
84 }