Валидация параметров краулера
Каждое описание параметра (CrawlerParameterDescriptor
) может содержать predicate-контролер. При загрузке модели контролер вызывается и если его параметр predicate, он откатывается до состояния false.
Механизм работы
Контролер вызывается в сборщике дескриптора в коде модуля краулера:
CrawlerParameterDescriptor PARAM = CrawlerParameterDescriptor.string() .name("") .validator() .build();
При запуске
SourceSystemsValidationComponent
собирает все параметры из:
CrawlerSource.connectParameters
;
CrawlerConnectorSource.connectParameters
;
CrawlerSource.runtimeParameters
;
CrawlerInstanceSource.runtimeParameters
.
Для каждого параметра‑источника ищется соответствующий дескриптор и вызывается:
descriptor.getValidator().test(rawValue)
Если predicate вернул false, то формируется ValidationResult с переводом:
Connector →
org.unidata.mdm.meta.validate.connector.param.invalid.characters
Instance →
org.unidata.mdm.meta.validate.instance.param.invalid.characters
Алгоритм размещен в SourceSystemsValidationComponent#validationChecker()
.
Примеры использования
Строковый параметр без спецсимволов:
CrawlerParameterDescriptor.string()
.name("resourceName")
.required(true)
.validator(BaseDisCrawlerParameters::noInvalidChars)
.build();
private static final char[] INVALID_CHARACTERS = { '"', '\\', '\'', '`', '«', '»', '<', '>', '{', '}', '[', ']', '(', ')' };
private static boolean noInvalidChars(String value) {
if (value == null) {
return true;
}
for (char c : INVALID_CHARACTERS) {
if (value.indexOf(c) >= 0) {
return false;
}
}
return true;
}
Массив строк без слова FAIL:
CrawlerParameterDescriptor.strings()
.name("names")
.validator(list -> list==null ||
((List<?>)list).stream().noneMatch("FAIL"::equals))
.build();