@Override public void validate(ValidatorContext context) { DataElement element = context.dataElement(); DataSchema schema = element.getSchema(); if (schema != null) { validateSchema(context, schema); } DataElement parentElement = element.getParent(); if (parentElement != null) { DataSchema parentSchema = parentElement.getSchema(); // check if the value belongs to a field in a record // if it belongs to a field, check if the field has // validators. if (parentSchema != null && parentSchema.getType() == DataSchema.Type.RECORD) { Object name = element.getName(); if (name.getClass() == String.class) { RecordDataSchema recordDataSchema = (RecordDataSchema) parentSchema; RecordDataSchema.Field field = recordDataSchema.getField((String) name); if (field != null) { getAndInvokeValidatorList(context, field); } } } } }
private void getAndInvokeValidatorList(ValidatorContext ctx, Object key) { List<Validator> validatorList = _cache.get(key); if (validatorList == null) { // this means schema or field to be validated has not been cached. ctx.addResult( new Message( ctx.dataElement().path(), "validation skipped, %1$s have not been initialized for use by %2$s", key, getClass().getSimpleName())); } else if (validatorList != NO_VALIDATORS) { for (Validator validator : validatorList) { if (_debugMode) { ctx.addResult( new Message(ctx.dataElement().path(), false, "validating with %1$s", validator)); } validator.validate(ctx); } } }