Object value = dataElement.getValue();
DataSchema schema = dataElement.getSchema();
if (schema.getType() != DataSchema.Type.RECORD ||
(((RecordDataSchema) schema).getFullName()).equals(SCHEMA_NAME) == false)
{
context.addResult(new Message(context.dataElement().path(),
"%1$s invoked on schema that is not %2$s",
AnyRecordValidator.class.getName(), SCHEMA_NAME));
}
else if (value.getClass() != DataMap.class)
{
context.addResult(new Message(context.dataElement().path(),
"%1$s expects data to be a DataMap, data is %2$s",
AnyRecordValidator.class.getName(), value));
}
else
{
DataMap dataMap = (DataMap) value;
if (dataMap.size() != 1)
{
context.addResult(new Message(context.dataElement().path(),
"%1$s expects data to be a DataMap with one entry, data is %2$s",
AnyRecordValidator.class.getName(), value));
}
else
{
Map.Entry<String, Object> entry = dataMap.entrySet().iterator().next();
String anySchemaName = entry.getKey();
Object anyValue = entry.getValue();
DataSchema anySchema = schemaFromName(context, anySchemaName);
if (anySchema != null)
{
DataElement anyElement = new SimpleDataElement(anyValue, entry.getKey(), anySchema, dataElement);
// do we want to have cache for anySchemaName to validator
// do we care about classMap argument to DataSchemaAnnotationValidator
DataSchemaAnnotationValidator validator = new DataSchemaAnnotationValidator(anySchema);
if (validator.isInitOk() == false)
{
boolean errorIfNotValidated = getParameter(context.validationOptions()).isValidSchema();
context.addResult(new Message(context.dataElement().path(),
errorIfNotValidated,
"%1$s failed to initialize %2$s with %3$s",
AnyRecordValidator.class.getName(),
DataSchemaAnnotationValidator.class.getSimpleName(),
anySchema));