-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathFallbackTreatmentValidator.java
More file actions
69 lines (54 loc) · 2.51 KB
/
FallbackTreatmentValidator.java
File metadata and controls
69 lines (54 loc) · 2.51 KB
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
package io.split.inputValidation;
import io.split.client.dtos.FallbackTreatment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.regex.Pattern;
import static io.split.inputValidation.SplitNameValidator.isValid;
public class FallbackTreatmentValidator {
private static final Logger _log = LoggerFactory.getLogger(FallbackTreatmentValidator.class);
private static final Pattern TREATMENT_MATCHER = Pattern.compile("^[0-9]+[.a-zA-Z0-9_-]*$|^[a-zA-Z]+[a-zA-Z0-9_-]*$");
private static final int MAX_LENGTH = 100;
public static String isValidTreatment(String name, String method) {
if (name == null) {
_log.error(String.format("%s: you passed a null treatment, fallback treatment must be a non-empty string", method));
return null;
}
if (name.isEmpty()) {
_log.error(String.format("%s: you passed an empty treatment, fallback treatment must be a non-empty string", method));
return null;
}
String trimmed = name.trim();
if (!trimmed.equals(name)) {
_log.warn(String.format("%s: fallback treatment %s has extra whitespace, trimming", method, name));
name = trimmed;
}
if (name.length() > MAX_LENGTH) {
return null;
}
if (!TREATMENT_MATCHER.matcher(name).find()) {
_log.error(String.format("%s: you passed %s, treatment must adhere to the regular expression " +
"^[0-9]+[.a-zA-Z0-9_-]*$|^[a-zA-Z]+[a-zA-Z0-9_-]*$", method, name));
return null;
}
return name;
}
public static Map<String, FallbackTreatment> isValidByFlagTreatment(Map<String, FallbackTreatment> byFlagTreatment, String method) {
Map<String, FallbackTreatment> result = new HashMap<>();
for (Map.Entry<String, FallbackTreatment> entry : byFlagTreatment.entrySet()) {
Optional<String> feature_name = isValid(entry.getKey(), "Validator");
if (feature_name.equals(Optional.empty())) {
continue;
}
FallbackTreatment fallbackTreatment = entry.getValue();
String treatment = isValidTreatment(fallbackTreatment.getTreatment(), "Validator");
if (treatment == null) {
continue;
}
result.put(feature_name.get(), new FallbackTreatment(treatment, fallbackTreatment.getConfig()));
}
return result;
}
}