1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.config.plugins.validation.validators;
18
19 import java.util.Collection;
20 import java.util.Map;
21
22 import org.apache.logging.log4j.Logger;
23 import org.apache.logging.log4j.core.config.plugins.validation.ConstraintValidator;
24 import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
25 import org.apache.logging.log4j.status.StatusLogger;
26
27
28
29
30
31
32
33
34
35
36
37
38
39 public class RequiredValidator implements ConstraintValidator<Required> {
40
41 private static final Logger LOGGER = StatusLogger.getLogger();
42
43 private Required annotation;
44
45 @Override
46 public void initialize(final Required annotation) {
47 this.annotation = annotation;
48 }
49
50 @Override
51 public boolean isValid(final Object value) {
52 if (value == null) {
53 return err();
54 }
55 if (value instanceof CharSequence) {
56 final CharSequence sequence = (CharSequence) value;
57 return sequence.length() != 0 || err();
58 }
59 final Class<?> clazz = value.getClass();
60 if (clazz.isArray()) {
61 final Object[] array = (Object[]) value;
62 return array.length != 0 || err();
63 }
64 if (Collection.class.isAssignableFrom(clazz)) {
65 final Collection<?> collection = (Collection<?>) value;
66 return collection.size() != 0 || err();
67 }
68 if (Map.class.isAssignableFrom(clazz)) {
69 final Map<?, ?> map = (Map<?, ?>) value;
70 return map.size() != 0 || err();
71 }
72 LOGGER.debug("Encountered type [{}] which can only be checked for null.", clazz.getName());
73 return true;
74 }
75
76 private boolean err() {
77 LOGGER.error(annotation.message());
78 return false;
79 }
80 }