Валидация параметров краулера

Каждое описание параметра (CrawlerParameterDescriptor) может содержать predicate-контролер. При загрузке модели контролер вызывается и если его параметр predicate, он откатывается до состояния false.

Механизм работы

  1. Контролер вызывается в сборщике дескриптора в коде модуля краулера:

    CrawlerParameterDescriptor PARAM = CrawlerParameterDescriptor.string()
    .name("")
    .validator()
    .build();
    
  2. При запуске SourceSystemsValidationComponent собирает все параметры из:

  • CrawlerSource.connectParameters;

  • CrawlerConnectorSource.connectParameters;

  • CrawlerSource.runtimeParameters;

  • CrawlerInstanceSource.runtimeParameters.

  1. Для каждого параметра‑источника ищется соответствующий дескриптор и вызывается:

    descriptor.getValidator().test(rawValue)
    
  2. Если predicate вернул false, то формируется ValidationResult с переводом:

  • Connectororg.unidata.mdm.meta.validate.connector.param.invalid.characters

  • Instanceorg.unidata.mdm.meta.validate.instance.param.invalid.characters

Алгоритм размещен в SourceSystemsValidationComponent#validationChecker().

Примеры использования

  1. Строковый параметр без спецсимволов:

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;
 }
  1. Массив строк без слова FAIL:

CrawlerParameterDescriptor.strings()
.name("names")
.validator(list -> list==null ||
     ((List<?>)list).stream().noneMatch("FAIL"::equals))
.build();