com.ingenico.direct.logging.Obfuscator Maven / Gradle / Ivy
package com.ingenico.direct.logging;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
abstract class Obfuscator {
private final Map obfuscators;
Obfuscator(Map obfuscators, boolean caseInsensitive) {
this.obfuscators = copy(obfuscators, caseInsensitive);
}
private Map copy(Map obfuscators, boolean caseInsensitive) {
Map copy;
if (caseInsensitive) {
copy = new TreeMap(String.CASE_INSENSITIVE_ORDER);
copy.putAll(obfuscators);
} else {
copy = new LinkedHashMap(obfuscators);
}
return Collections.unmodifiableMap(copy);
}
String obfuscateValue(String key, String value) {
ValueObfuscator obfuscator = obfuscators.get(key);
return obfuscator != null ? obfuscator.obfuscateValue(value) : value;
}
abstract static class Builder {
private final Map obfuscators = new LinkedHashMap();
Builder() {}
Builder withField(String key) {
obfuscators.put(key, ValueObfuscator.INSTANCE);
return this;
}
Builder withSensitiveField(String key) {
obfuscators.put(key, SensitiveValueObfuscator.INSTANCE);
return this;
}
Map getObfuscators() {
return obfuscators;
}
abstract Obfuscator build();
}
}